注册 登录
编程论坛 C++教室

[求助]vector用begin和end初始化的问题

kyan54 发布于 2007-06-05 12:48, 2358 次点击
int main()
{
vector<string> svec;
// ...
// 用svec 的全部元素初始化svec2
vector<string> svec2( svec.begin(), svec.end() );
// 用svec 的前半部分初始化svec3
vector<string>::iterator it =
svec.begin() + svec.size()/2;
vector<string> svec3( svec.begin(), it );
// 处理 vectors ...
}

这里是在c++primer第三版,223页,书上看到的。。

为什么这里用svec.begin(), svec.end() 可以初始化svec2??
那他怎么初始化的??
初始化后的值全都是0??

3 回复
#2
aipb20072007-06-05 12:52
书上应该有写,带一对迭代器的构造函数。
msdn上也有
#3
独孤风2007-06-06 14:09
看看c++primer 中文版吧。265页
初始化后当然为0了,你没有给vector<string> svec;它里面赋值,系统就认为它里面没有值
而你在给vector<string> svec2( svec.begin(), svec.end() );赋值的时候,系统就都给它们0的初始值了。
#4
doom52112007-06-07 19:51
vector类对象支持用另一个数组的指针来初始化,因为它不能像内置数组那样显式的初始化.此种初始化需要两个指针,第一个表示被用来初始化的数组的开始地址,第二个表示被用来初始化的数组的最后一个元素的后一个地址.这样初始化就相当于把Svec的元素全部赋值给Svec2了,而Svec缺省的值为0,故Svec2的值也全部为0.
另外Svec2赋值还可以只用到Svec的一部分元素.
最近也是才开始看C++ Primer的书,比以前看的C++ 书经典多了.属于菜鸟级,回复帖子纯粹让自己复习学过的东西.
1