cuốn sách gpt4 ai đã làm

c++ - push_back() 期间 vector 迭代器不可取消引用错误

In lại Tác giả: Walker 123 更新时间:2023-11-28 01:20:54 31 4
mua khóa gpt4 Nike

下面的代码在 Release模式下工作,并且仅在 Debug模式下在 g_ItemList.push_back() 引发错误,我浏览了一些 SO 帖子和论坛。有人提到 "You can't iterate through a vector while pushing back, as push_back may invalidate iterators" .但这对我来说还不清楚。有人可以解释它背后的逻辑以及如何解决这个问题吗?我正在使用 Visual Studio 2010 (v100) 编译程序

std::vector VECT_ITEMS;    
VECT_ITEMS g_ItemList;
g_ItemList.clear();

vì (i = 0; i < n; i++)
g_ItemList.push_back (temp[i]); //where PPart *temp;

错误信息 nhập mô tả hình ảnh ở đây

câu trả lời hay nhất

vector 本质上是数组的包装器。给定的数组具有特定的大小, vector 的数据存储为该数组的前 n 个元素,其中 N 是 vector 的大小,数组的大小大于或等于N。当您调用 đẩy lùi 并且 vector 在其内部数组中没有足够的空间时,它会创建一个更大的新 vector (通常是现在大小不足的数组的两倍)并复制所有 vector 在删除旧数组之前将元素放入该数组(这些数组存储在堆中并通过 mớidelete 创建)。

迭代器本质上是指向这个内部数组的指针¹。因此,当您调用 push_back 时,所有当前迭代器都可能失效。这是因为可能已经创建了一个新数组,指向旧数组的指针指向现在释放的内存。从技术上讲,当您调用 push_back 然后取消引用在该调用之前创建的迭代器时,它是 undefined behavior .

1:从技术上讲,它们是指向内部数组的指针的类包装器,但原则上是两种方式。将它们仅视为指针通常是有用的,但并非总是如此。

关于c++ - push_back() 期间 vector 迭代器不可取消引用错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56318234/

31 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress