[英]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.