C++ vector 赋值问题

palm_m palm_m 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
先看如下一段代码

#include <iostream>
#include <string>
#include <vector>
using namespace std;
class student
{
public:
student(int id,char *name)
{
//cout<<"student(int id,char *name)"<<endl;
m_id = id;
strcpy(m_name,name);
}
student()
{
cout<<"student()"<<endl;
m_id = 0;
strcpy(m_name,"");
}

student& operator=(const student& s)
{
cout<<"const student& operator=(const student& s)"<<endl;
m_id = s.m_id+100;
strcpy(m_name,s.m_name);
return *this;
}

student(const student& s)
{
cout<<"s.m_id = "<<m_id<<"\ts.m_name = "<<s.m_name<<endl;
cout<<"m_id = "<<m_id<<"\tm_name = "<<m_name<<endl;
m_id = s.m_id+10;
strcpy(m_name,s.m_name);
}
friend ostream& operator << (ostream & of,student &stu)
{
of<< stu.m_id<<'\t'<<stu.m_name<<endl;
return of;
}
private:
int m_id;
char m_name[20];
};
int main()
{
vector<student> stlist;
stlist.push_back(student(1,"wang1"));
/*
stlist.push_back(student(2,"wang2"));
stlist.push_back(student(3,"wang3"));
stlist.push_back(student(4,"wang4"));
stlist.push_back(student(5,"wang5"));
*/
cout<<"=============================="<<endl;
vector<student> stulist = stlist;
vector<student>::iterator it = stulist.begin();
for( ; it!=stulist.end(); it++)
{
cout<<*it<<endl;
}
return 0;
}


期望输出 11 wang1
结果输出 不同编译器表现不同

vector 容器赋值时,调用的是vector元素的赋值构造函数,我重写了对象的赋值构造函数,赋值构造函数
虽然在vector容器赋值时调用了,但是计算的结果完全不正确,期望高手指点,期待同行探讨
...全文
评论 4
收藏 已收藏
分享
返回顶部
palm_m
C++ 语言 65,214 成员 250,514 内容