gpt4 book ai didi

c++ - 为什么在达到容量后在 vector 中完成插入时 C++ 不处理迭代器?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:54:23 24 4
gpt4 key购买 nike

我写这段小代码只是为了看看迭代器实际上是如何失效的,并且在达到其容量后不指向 vector 的更改位置。

这里 vector 和 capacity 的大小最初都是 5 。之后,我在 vector 中插入了一些其他元素,并且没有重新初始化我的迭代器以指向 myvector.begin()。当再次打印 vector 的元素时,这会导致 maximum size of vector is : 1073741823 在我的输出中出现垃圾值 49

我的问题是,为什么在所有元素都被复制到新位置后,C++ 没有再次将点迭代器指向有效的 myvector.begin()
这也可能导致一些难以调试的行为。我知道一种安全的工作方式是始终在使用迭代器之前重新初始化它。

  #include<iostream>
#include<vector>
#include<stdio.h>

using namespace std;

int main()
{
vector<int> myvector;
vector<int>::iterator it;
int myarray[]= {100,200,300,400};
myvector.insert(it,500);
it=myvector.begin();
myvector.insert(it,myarray,myarray+4);
it=myvector.begin();
for(;it!=myvector.end();++it)
cout <<*it<<endl;
cout <<"size of vector is :" << myvector.size() <<"\n";
cout <<"capacity of vector is : " << myvector.capacity()<<"\n";
cout <<"maximum size of vector is : " << myvector.max_size()<<"\n";
myvector.push_back(600);
for(;it!=myvector.end();++it)
cout <<*it<<endl;
}
Output of program :-
100
200
300
400
500
size of vector is :5
capacity of vector is : 5
maximum size of vector is : 1073741823
49
100
200
300
400
500
600

最佳答案

因为这是不切实际的,而且可能是不可能的。

vector 是否应该保留所有其迭代器的列表,并且一旦调用无效触发方法,它们就会修改所有它们?

关于c++ - 为什么在达到容量后在 vector 中完成插入时 C++ 不处理迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10387923/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com