gpt4 book ai didi

c++ - 在 vector 上使用迭代器时,'std::bad_alloc' 甚至是错误的 vector 大小

转载 作者:行者123 更新时间:2023-11-30 01:46:35 26 4
gpt4 key购买 nike

当我试图将一个额外的字符串推到一个 vector 的中间时,我在抛出一个“std::bad_alloc”实例后调用了terminate 。我用的是 g++ 4.8.2。

coliru 上使用 g++ 5.2 时,我什至得到了错误 vector 大小的输出 str_vector 0 的大小:1,str_vector 1 的大小:1 .

当我使用索引(例如,str_vector[0])访问 vector 或使用 std::list 时,程序可以正常工作。

这是否意味着对 iterator 的使用有一些限制?我假设当我使用索引或迭代器访问 vector 时应该没有任何区别。

#include <iostream>
#include <string>
#include <vector>

using std::vector;
using std::string;

int main() {
vector<vector<string>> str_vector;

str_vector.emplace_back();
vector<vector<string>>::iterator it0 = std::prev(str_vector.end());
it0->push_back("a");

str_vector.emplace_back();
vector<vector<string>>::iterator it1 = std::prev(str_vector.end());
it1->push_back("a");

it0->push_back("a"); // bad alloc here

std::cerr << "size of str_vector 0: " << it0->size() << std::endl;
std::cerr << "size of str_vector 1: " << it1->size() << std::endl;

return 0;
}

最佳答案

当你向一个 vector 添加元素时,它可能需要重新分配它的内部内存,这会导致所有迭代器变得无效。所以在你执行第二个 emplace_back 之后,第一个迭代器 it0 变得无效。

关于c++ - 在 vector 上使用迭代器时,'std::bad_alloc' 甚至是错误的 vector 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32933885/

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