首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Iterator不访问完全向量

Iterator不访问完全向量
EN

Stack Overflow用户
提问于 2013-07-31 02:00:22
回答 2查看 108关注 0票数 1
代码语言:javascript
复制
int main()
{
    vector<int> vi;

    vi.reserve(10);
   // back_insert_iterator<vector<int> > iter(vi);

    vector<int>::iterator iter = vi.begin();

    *iter = 1;
    ++iter;
    *iter = 2;
    ++iter;
    *iter = 3;

    back_insert_iterator<std::__1::vector<int> > iterb(vi);
    back_inserter(vi) = 4;
    back_inserter(vi) = 5;

    vi.reserve(vi.size() * 2);
    copy(vi.begin(), vi.end(), vi.end());

    ostream_iterator<int> os(cout, " ");
    copy(vi.begin(), vi.end(), os);
}

问题1,为什么cout会打印4 5,而我希望它会打印1 2 3 4 5 1 2 3 4 5?问题2,当我用copy(vi.begin(), vi.end(), back_insert(vi))替换它时,它会打印4 5 4 5,为什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-31 02:03:44

您的代码具有未定义的行为,因为您将迭代器分配给处于或结束之后的迭代器。reserve()函数不更新大小,只更新容量。您可以尝试调整大小()。

票数 9
EN

Stack Overflow用户

发布于 2013-07-31 02:10:51

copy(vi.begin(),vi.end(),vi.end())无法工作,因为std::copy写入目标迭代器,并且不能写入最终迭代器。

copy(vi.begin(),vi.end(),back_insert(vi))无法工作,因为back_insert_iterator在插入时更改了向量,从而使源迭代器无效。

您可以尝试这样做:

代码语言:javascript
复制
 size_t vi_size = vi.size();
 vi.resize(vi_size*2);
 copy(vi.begin(),vi.begin()+vi_size,vi.begin()+vi_size);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17960386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档