迭代器不访问完整的矢量

Iterator does not access full vector

本文关键字:访问 迭代器      更新时间:2023-10-16
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,为什么?

您的代码具有未定义的行为,因为您分配给位于末尾或之后的迭代器。 reserve(( 函数不会更新大小,只会更新容量。 你可以尝试 resize(( 代替。

copy(vi.begin(),vi.end(),vi.end())不起作用,因为std::copy写入目标迭代器,并且您无法写入结束迭代器。

copy(vi.begin(),vi.end(),back_insert(vi))不起作用,因为back_insert_iterator在插入时会更改向量,从而使源迭代器失效。

您可以改为尝试以下操作:

 size_t vi_size = vi.size();
 vi.resize(vi_size*2);
 copy(vi.begin(),vi.begin()+vi_size,vi.begin()+vi_size);