“reserve”与“iterator”的关系

问题描述 投票:0回答:2

将此保留函数与此迭代器对象一起使用时,程序会产生意外错误。

当我使用函数

reserve()
时,它按预期工作,但是当我使用
iterator
时,它根本不起作用。

最糟糕的代码:

  vector <int> nums{1,2,3,4,5}, numsT{};

  numsT.reserve(50);
  numsT.insert(numsT.begin(), nums.begin(), nums.end() - 1);

不起作用的代码是

  vector <int> nums{ 1,2,3,4,5 }, numsT{};
  vector <int>::iterator firs{ nums.begin() }, last{ nums.end() - 1 }, position{ numsT.begin() };
 
  numsT.reserve(50);
  numsT.insert(poistion, first, last);
c++ iterator reverse
2个回答
0
投票

cppreference 说:

如果

new_cap
大于
capacity()
,则所有迭代器(包括
end()
迭代器)以及对元素的所有引用 无效。

因此,如果发生重新分配(这里就是这种情况),迭代器

position
将不再有效。调用
begin()
将返回不同的值。


0
投票

您不能使用 正如您在

std::vector::reserve
文档中看到的:

如果new_cap大于capacity(),则所有迭代器(包括 end() 迭代器)并且对元素的所有引用都无效。

在您的情况下,您将

position
初始化为
numsT.begin()
,但随后调整
numsT
的大小,这会使迭代器无效。

© www.soinside.com 2019 - 2024. All rights reserved.