导航
  • 主页
  • VC综合技术
  • MFC新技术
  • 互联网技术
  • .NET 技术
  • VC/MFC界面
  • VC/MFC 进程
  • VC/MFC 数据库
  • VC++技术资源

c++中vector问题

adriany 2009-08-26 02:31:45
/**********************************************************************/
下面的这段程序是我学习vector模版时自己编的程序,编译连接通过后,提示内存错误,大家帮忙看看
#include <iostream>
#include <string>
#include <vector>
#include <conio.h>
#include <math.h>
#include "math.h"

using namespace std;

//test1类实现输入两个数x,y计算两者积,这部分没有错
class test1{
int x;
int y;
string ID;
public:
int z;
test1(string ID1="mmm",int x1=0,int y1=0,int z=0);
set(string ID1="mmm",int x1=0,int y1=0);
~test1();
void calculate(void);
string getID();
};

test1::test1(string ID1,int x1,int y1, int z1){
ID=ID1;
x=x1;
y=y1;
z=z1;
}
test1::set(string ID1,int x1,int y1){
ID=ID1;
x=x1;
y=y1;
}

test1::~test1()
{
}


void test1::calculate(void){
z=x*y;
}

string test1::getID(){
return ID;
}



//主函数使用了vector把设定的x,y以及ID的值存起来,然后从vector中调出这三个数进行计算
int main()
{

test1 *test;
vector<test1*> m_ptest2; //向量模版


test=new test1;

vector<test1>::iterator *it= m_ptest2.begin();


test->set("asdf",23,20);
m_ptest2.push_back(test);

(*it)->calculate(); //问题是不是出在这里????要怎么改

printf("%s,%d\n\n",(*it)->getID().c_str(),(*it)->z);


return 0;
}
...全文
77 点赞 收藏 13
写回复
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
adriany 2009-08-26
[Quote=引用 9 楼 coverallwangp 的回复:]
C/C++ code
#include<iostream>
#include<string>
#include<vector>
#include<conio.h>
#include<math.h>usingnamespace std;//test1类实现输入两个数x,y计算两者积,这部分没有错class test1{int x;int y;string ID;public:int z;
test1(string ID1="mmm",int x1=0,int y1=0,int z=0);set(string ID1="mmm",int x1=0,int y1=0);~test1();void calculate(void);string getID();
};

test1::test1(string ID1,int x1,int y1,int z1){
ID=ID1;
x=x1;
y=y1;
z=z1;
}
test1::set(string ID1,int x1,int y1){
ID=ID1;
x=x1;
y=y1;
}

test1::~test1()
{
}void test1::calculate(void){
z=x*y;
}string test1::getID(){return ID;
}//主函数使用了vector把设定的x,y以及ID的值存起来,然后从vector中调出这三个数进行计算int main()
{

test1*test;
vector<test1*> m_ptest2;//向量模版

test=new test1;




test->set("asdf",23,20);
m_ptest2.push_back(test);

vector<test1>::iterator*it= m_ptest2.begin();
(*it)->calculate();//问题是不是出在这里????要怎么改
printf("%s,%d\n\n",(*it)->getID().c_str(),(*it)->z);return0;
}

vc6编译通过,运行结果如下:
asdf,460

Press any key to continue
[/Quote]


哥们,能不能加我qq啊,我还有些vector的问题,帖子发着太不方便了。我的253647220
回复
adriany 2009-08-26
[Quote=引用 4 楼 coverallwangp 的回复:]
C/C++ codeint main()
{

test1*test;
vector<test1*> m_ptest2;//向量模版

test=new test1;




test->set("asdf",23,20);
m_ptest2.push_back(test);

vector<test1>::iterator*it= m_ptest2.begin();
(*it)->calculate();//问题是不是出在这里????要怎么改
printf("%s,%d\n\n",(*it)->getID().c_str(),(*it)->z);return0;
}

先push_back才能取得begin(),像上面改一下
[/Quote]

哥们,能不能加我qq啊,我还有些vector的问题,帖子发着太不方便了。我的253647220
回复
Fly_1101 2009-08-26
查看了vector的代码,发表下我的看法:

template<class _Ty, class _A = allocator<_Ty> >
class vector
{
typedef _A::pointer _Tptr;
typedef _Tptr iterator;
...
}

template<class _Ty>
class allocator
{
typedef _Ty _FARQ *pointer;
...
}

也就是说vector<T>::iterator就是allocator<T>::pointer
allocator<T>::pointer就是T*

当T是test1*时,vector<test1*>::iterator 就是test1**
当T是test1时,vector<test1>::iterator 是test1*,即vector<test1>::iterator* 也是test1**

所以两者皆可,如果写成test1 **it= m_ptest2.begin();程序也可以正常运行。
不过我觉得还是写成vector<test1*>::iterator it= m_ptest2.begin();最合逻辑
回复
Fly_1101 2009-08-26
it->calculate(); 错了,还是应该
(*it)->calculate();

另外
vector <test1*> m_ptest2;
vector <test1>::iterator *it= m_ptest2.begin();
这样也可以还开眼界了。。
回复
coverallwangp 2009-08-26

#include <iostream>
#include <string>
#include <vector>
#include <conio.h>
#include <math.h>


using namespace std;

//test1类实现输入两个数x,y计算两者积,这部分没有错
class test1{
int x;
int y;
string ID;
public:
int z;
test1(string ID1="mmm",int x1=0,int y1=0,int z=0);
set(string ID1="mmm",int x1=0,int y1=0);
~test1();
void calculate(void);
string getID();
};

test1::test1(string ID1,int x1,int y1, int z1){
ID=ID1;
x=x1;
y=y1;
z=z1;
}
test1::set(string ID1,int x1,int y1){
ID=ID1;
x=x1;
y=y1;
}

test1::~test1()
{
}


void test1::calculate(void){
z=x*y;
}

string test1::getID(){
return ID;
}



//主函数使用了vector把设定的x,y以及ID的值存起来,然后从vector中调出这三个数进行计算
int main()
{

test1 *test;
vector <test1*> m_ptest2; //向量模版


test=new test1;




test->set("asdf",23,20);
m_ptest2.push_back(test);

vector <test1>::iterator *it= m_ptest2.begin();
(*it)->calculate(); //问题是不是出在这里????要怎么改

printf("%s,%d\n\n",(*it)->getID().c_str(),(*it)->z);


return 0;
}


vc6编译通过,运行结果如下:
asdf,460

Press any key to continue
回复
Fly_1101 2009-08-26
应该这样

int main()
{

test1 *test;
vector <test1*> m_ptest2; //向量模版


test=new test1;

vector <test1*>::iterator it= m_ptest2.begin();

。。。

it->calculate(); // 类似的都要改
...
回复
fishion 2009-08-26
vector <test1*> m_ptest2; //向量模版


test=new test1;

vector <test1*>::iterator it= m_ptest2.begin();
回复
adriany 2009-08-26
[Quote=引用 5 楼 secretcf 的回复:]
引用 3 楼 adriany 的回复:
引用 2 楼 healer_kx 的回复:
vector  <test1>::iterator *it= m_ptest2.begin();
这句语法就不对吧?

啊?那要怎么改啊


vector  <test1>::iterator it= m_ptest2.begin();
[/Quote]

修改后编译时就出现错误了,说是类型不匹配
回复
secretcf 2009-08-26
[Quote=引用 3 楼 adriany 的回复:]
引用 2 楼 healer_kx 的回复:
vector <test1>::iterator *it= m_ptest2.begin();
这句语法就不对吧?

啊?那要怎么改啊
[/Quote]

vector <test1>::iterator it= m_ptest2.begin();
回复
coverallwangp 2009-08-26

int main()
{

test1 *test;
vector <test1*> m_ptest2; //向量模版


test=new test1;




test->set("asdf",23,20);
m_ptest2.push_back(test);

vector <test1>::iterator *it= m_ptest2.begin();
(*it)->calculate(); //问题是不是出在这里????要怎么改

printf("%s,%d\n\n",(*it)->getID().c_str(),(*it)->z);


return 0;
}


先push_back才能取得begin(),像上面改一下
回复
adriany 2009-08-26
[Quote=引用 2 楼 healer_kx 的回复:]
vector <test1>::iterator *it= m_ptest2.begin();
这句语法就不对吧?
[/Quote]
啊?那要怎么改啊
回复
healer_kx 2009-08-26
vector <test1>::iterator *it= m_ptest2.begin();
这句语法就不对吧?
回复
adriany 2009-08-26
自己顶啊
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……