C++:在vector中放自己定义的类,对类有何要求?

yuanyuan_yangzhen 2012-02-13 05:38:08
我定义了一个类,存储一些数据,然后把这个类存放到vector中,对这个类有什么要求吗?看书上说的是类必须有默认的构造函数,可是类应该都有默认的构造函数啊?(我是菜鸟,很有可能说的不对。。。)该怎么做呢,大神们帮帮忙吧。
...全文
1966 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
鸟辉 2012-02-14
  • 打赏
  • 举报
回复


#include<iostream>
#include<vector>

class myInt
{
public:
myInt():m_li(0),m_ri(0)
{}
~myInt(){}
const myInt& operator=(const myInt& _tmp)
{
this->m_li = _tmp.m_li;
this->m_ri = _tmp.m_ri;
return *this;
}
void print()
{
std::cout<<"m_li = "<<this->m_li<<std::endl;
std::cout<<"m_ri = "<<this->m_ri<<std::endl;
}

void set(int li, int ri)
{
this->m_li = li;
this->m_ri = ri;
}
private:
int m_li;
int m_ri;
};

//typedef vector<myInt> MYINT;

int main()
{

myInt c1;
myInt c2;
myInt c3;
c1.set(1,1);
c2.set(2,2);
c3.set(3,3);
std::vector<myInt> v1;

v1.push_back(c1);
v1.push_back(c2);
v1.push_back(c3);

for(std::vector<myInt>::iterator iter = v1.begin(); iter != v1.end(); iter++)
{
iter->print();
}

v1.clear();


return 0;
}



结果:

m_li = 1
m_ri = 1
m_li = 2
m_ri = 2
m_li = 3
m_ri = 3
Press any key to continue
yuanyuan_yangzhen 2012-02-14
  • 打赏
  • 举报
回复
哪位大神帮帮忙,给个实例吧~~~ 把类放到vector后,怎么给vector赋值呢?
yuanyuan_yangzhen 2012-02-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 quwei197874 的回复:]

拷贝构造函数,赋值操作符,析构函数,只要一个不用默认的,就要一起自定义
[/Quote]


追问一下:用vector的时候,常出现的越界是什么原因呢?
yuanyuan_yangzhen 2012-02-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jackyjkchen 的回复:]

类一旦存在拷贝构造,深拷贝还是浅拷贝都很有讲究,各有优缺点,搞不好好有可能误用
[/Quote]


我是这么定义类的:
class variableInfo
{
private:
string variableName;
vector<string> lineData;
string variableType;
string address;
public:
int ReadCsvFile();

};


然后在函数ReadCsvFile中将类装到vector里:
vector<variableInfo> mapVarName;

给mapVarName赋值的时候,用push_back函数为什么不行呢?为什么这样mapVarName[0].variableName = vaiable又可以??还有mapVarName[0]的下标0是什么含义?我以为它是对应着我定义的类中的第一个变量variableName,可看样子不像啊?

大神们帮帮忙吧~~~~崩溃了~~
sl51314240 2012-02-14
  • 打赏
  • 举报
回复
容器里面最好放指针,放类很浪费内存
sghdls 2012-02-14
  • 打赏
  • 举报
回复

复制构造函数, 析构函数
iamnobody 2012-02-13
  • 打赏
  • 举报
回复
要有默认构造函数。

至少 resize()函数是需要默认构造函数的。
wjjll123 2012-02-13
  • 打赏
  • 举报
回复
没发现有什么限制啊。
zhao1zhong6 2012-02-13
  • 打赏
  • 举报
回复
类里面动态申请的内存,在析构函数中要自己释放。
龙行天下之Sky 2012-02-13
  • 打赏
  • 举报
回复
如果你写了构造函数,则一定要手写默认构造函数,以免出错
其他倒是是没有什么
断无轻 2012-02-13
  • 打赏
  • 举报
回复
简单数据类(无堆分配数据,对象较小),基本没什么要注意。
有堆分配数据的话要注意重载赋值操作符等
数据较大时一般vector保存指针比较好吧。
jackyjkchen 2012-02-13
  • 打赏
  • 举报
回复
类一旦存在拷贝构造,深拷贝还是浅拷贝都很有讲究,各有优缺点,搞不好好有可能误用
quwei197874 2012-02-13
  • 打赏
  • 举报
回复
拷贝构造函数,赋值操作符,析构函数,只要一个不用默认的,就要一起自定义
ryfdizuo 2012-02-13
  • 打赏
  • 举报
回复
拷贝构造函数,赋值操作符,
Christ_Day 2012-02-13
  • 打赏
  • 举报
回复
如果你自己定义了构造函数,编译器就不会帮你生成默认构造函数了
ouyh12345 2012-02-13
  • 打赏
  • 举报
回复
要有拷贝构造函数吧
如果类比较大,还是放指针吧

65,183

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧