我在做一些「C++ prime」的練習時遇到了問題,iterator end()有問題。所以我寫了一個測試文件,它的代碼如下:爲什麼迭代器從結尾()獲得的結果很奇怪?
int main (void)
{
vector<int> v(10);
auto c = v.end();
return 0;
}
是什麼讓我驚喜的是c的值不是10,而是一個陌生的號碼。這裏是我的調試結果:
這是什麼問題的原因是什麼?這是由於編譯器?我使用「g ++ -g -Wall -std = C++ 14」來編譯。
爲什麼'c'的值是10?它是一個迭代器,而不是一個數字,它甚至是一個「超過最後」的迭代器,對解引用無效。 – molbdnilo
對於std :: vector <>,迭代器不是索引,它是一個指針。指針是一個指向內存中某個位置的數字。如果你想將它轉換爲索引,你需要從它減去v.begin():v.end() - v.begin(),那麼你會得到10,如你所料。 – BrunoLevy
我們可以只考慮迭代器作爲指針還是它們之間有不同的東西?我只是C++的初學者,並在c之前使用過。 – lookfiresu123