【发布时间】:2020-06-01 00:58:34
【问题描述】:
我无法理解为什么在下面显示的测试中,迭代器 p 永远不会到达末尾,因此循环仅在 k = 20 时才中断? push_back 究竟是在做什么来导致未定义的行为?是不是因为vector为我要使用的新元素动态分配了一堆额外的存储空间,而数量不一定是我要使用的数量?
#include <iostream>
#include <vector>
#include <list>
using namespace std;
const int MAGIC = 11223344;
void test()
{
bool allValid = true;
int k = 0;
vector<int> v2(5, MAGIC);
k = 0;
for (vector<int>::iterator p = v2.begin(); p != v2.end(); p++, k++)
{
if (k >= 20) // prevent infinite loop
break;
if (*p != MAGIC)
{
cout << "Item# " << k << " is " << *p << ", not " << MAGIC <<"!" << endl;
allValid = false;
}
if (k == 2)
{
for (int i = 0; i < 5; i++)
v2.push_back(MAGIC);
}
}
if (allValid && k == 10)
cout << "Passed test 3" << endl;
else
cout << "Failed test 3" << "\n" << k << endl;
}
int main()
{
test();
}
【问题讨论】: