将此保留函数与此迭代器对象一起使用时,程序会产生意外错误。
当我使用函数
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);
cppreference 说:
如果
大于new_cap
,则所有迭代器(包括capacity()
迭代器)以及对元素的所有引用 无效。end()
因此,如果发生重新分配(这里就是这种情况),迭代器
position
将不再有效。调用 begin()
将返回不同的值。
std::vector::reserve
文档中看到的:
如果new_cap大于capacity(),则所有迭代器(包括 end() 迭代器)并且对元素的所有引用都无效。
在您的情况下,您将
position
初始化为 numsT.begin()
,但随后调整 numsT
的大小,这会使迭代器无效。