vector对象间可以通过"="来初始化吗?

时间:2023-01-30 19:47:30
vector<string>coll1;
vector<string> coll2;
// fill both collections with the same elements
coll1.push_back ("1xxx");
coll1.push_back ("2x");
col12=coll1;
这个怎么说col12=coll1有问题?

6 个解决方案

#1


回答是肯定的,vector<string>对象间可以通过"="来初始化。

你上面程序中的错误在于 col12=coll1;是赋值语句,不是初始化。而对于容器类(包括 vector),没有定义类外的“=”运算符,所以col12=coll1;是非法的。

定义对象时的初始化应该是这样的:vector<string> coll2( coll1 );

#2


接上帖:

定义对象时的初始化或者是这样的:vector<string> coll2 = coll1;。以上两者等价。

#3


是呀,来晚了。

#4


也可以用iterator.逐个push_back

#5


不过如果是
vector<int>coll1;
vector<int> coll2;

coll1 = coll2;
好象是没问题的。

#6


注意!

我上面的回答有错误。我竟然说 vector<string> 对象间不能互相赋值,对此还做了错误的解释。现在予以改正:

所有的C++标准库中的容器类,只要它们的元素的类型相同,其对象间可以互相赋值。

现在发现楼主程序中的错误在于书写问题:col12=coll1; 中的 col12 应该改为 coll2。

#1


回答是肯定的,vector<string>对象间可以通过"="来初始化。

你上面程序中的错误在于 col12=coll1;是赋值语句,不是初始化。而对于容器类(包括 vector),没有定义类外的“=”运算符,所以col12=coll1;是非法的。

定义对象时的初始化应该是这样的:vector<string> coll2( coll1 );

#2


接上帖:

定义对象时的初始化或者是这样的:vector<string> coll2 = coll1;。以上两者等价。

#3


是呀,来晚了。

#4


也可以用iterator.逐个push_back

#5


不过如果是
vector<int>coll1;
vector<int> coll2;

coll1 = coll2;
好象是没问题的。

#6


注意!

我上面的回答有错误。我竟然说 vector<string> 对象间不能互相赋值,对此还做了错误的解释。现在予以改正:

所有的C++标准库中的容器类,只要它们的元素的类型相同,其对象间可以互相赋值。

现在发现楼主程序中的错误在于书写问题:col12=coll1; 中的 col12 应该改为 coll2。