gpt4 book ai didi

C++:在push_back时迭代指针 vector 时出现段错误

转载 作者:行者123 更新时间:2023-11-30 02:14:12 24 4
gpt4 key购买 nike

我想遍历指向对象的指针 vector 。在迭代时,我必须 push_back 指向 vector 的新指针。在循环之前,push_backs 的数量是未知的,也没有中止标准,所以我不能使用 while 循环。

这是一个在整数上使用指针的示例,它显示与对象版本相同的错误:一次迭代后出现段错误(核心已转储)。

vector<int*> vec;
int a = 43;
vec.push_back(&a);

for (vector<int*>::iterator it = vec.begin(); it != vec.end(); ++it) {
cout << *(*it) << " " << *it << endl;
vec.push_back(&a);
}

相同的代码,但使用整数效果很好。

vector <int>vec;
int a = 43;
vec.push_back (a);

for (vector < int >::iterator it = vec.begin (); it != vec.end (); ++it){
cout << (*it) << " " << *it << endl;
vec.push_back (a);
}

最佳答案

push_backsize > capacity 中追加结果时使迭代器无效,因此它会重新分配并复制到新空间。

Appends the given element value to the end of the container.

1) The new element is initialized as a copy of value.

2) value is moved into the new element.

If the new size() is greater than capacity() then all iterators and references (including the past-the-end iterator) are invalidated. Otherwise only the past-the-end iterator is invalidated.

此外,正如@Jesper 指出的那样,您正在将对局部变量的引用存储在vector 中:

int a = 43; 
vec.push_back(&a);

如果在您的 vector 之前超出范围,您将有悬空引用。

关于C++:在push_back时迭代指针 vector 时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58308242/

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