[英]std::cin >> vector[i] won't let iterators work properly?
我一直想知道為什么我的std::vector<int>
沒有得到排序,並且我已經意識到使用std::cin >> myVector[i]
時myVector.begin()
和myVector.end()
的值相同(第一個索引) std::cin >> myVector[i]
看一下我剛剛創建的示例代碼。
#include <iostream>
#include <vector>
#include <algorithm>
int main ()
{
int N;
// take size
std::cin >> N;
std::vector<int> myVector;
myVector.reserve(N);
// take input
for (int i = 0; i < N; i++) {
// this messes up iterators?
std::cin >> myVector[i];
// this works
// int intput;
// std::cin >> input;
// myVector.push_back(input);
}
// iterators not working properly
std::cout << *(myVector.begin()) << std::endl; // outputs first index
std::cout << *(myVector.end()) << std::endl; // outputs first index!?
// sort
// std::sort(myVector.begin(), myVector.end());
return 0;
}
輸入樣例:
5
4
3
2
1
0
輸出:
4
4
預期輸出:
4
0
因此,我的問題是std::cin >> myVector[i]
搞亂迭代器嗎? 為什么push_back
和[]operators
不起作用?
謝謝
reserve()
只是預分配空間,因此后續的追加將不需要(盡可能多)重新分配-它不會調整向量的大小 。 要調整大小,您需要... resize()
。 :)
std::vector<T>
分別跟蹤其自身的大小 (元素數)和容量 (無需重新分配即可包含的最大元素數)。 要看到reserve()
不會更改大小,最簡單的方法是在reserve()
之后在向量上調用size()
reserve()
。 您會看到向量仍然“相信”其大小為0。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.