0
我試圖理解爲什麼下面的代碼的行爲方式是這樣:爲什麼在調用erase和push_back之後,下面的元素出現在這個C++向量的頭部和尾部?
std::vector<int*> k;
for (int i = 0; i < 5; ++i) k.push_back(new int(i));
for (int i = 0; i < k.size(); ++i)
std::cout << "k[" << i << "]: " << *k[i] << "@" << k[i] << ", ";
std::cout << std::endl;
for (int i = 0; i < k.size(); ++i) {
int* p = k[i];
delete p;
if (i >= 2) {
k.erase(k.begin(), k.begin() + i);
k.push_back(new int(5));
break;
}
}
for (int i = 0; i < k.size(); ++i)
std::cout << "k[" << i << "]: " << *k[i] << "@" << k[i] << ", ";
std::cout << std::endl;
當我運行此,我們第一次打印k
內容我看到這一點:
[0]: [email protected], k[1] [email protected], k[2]: [email protected], k[3]: [email protected], k[4]: [email protected]
這是我的預期。然後,在擦除和推動後,我預計前兩個元素將消失,最後三個元素將被移動,第五個元素將出現在最後。不過,我得到這個:
k[0]: [email protected], k[1]: [email protected], k[2]: [email protected], k[5]: [email protected],
我確實看到k[5]
出現在結束後,其餘元件位移,但我不理解爲什麼它也出現爲第一要素了。
完全正確!謝謝,我盯着這個很長一段時間,它一直在躲避我...... –