std::cin >> vector[i] 不会让迭代器正常工作?
std::cin >> vector[i] won't let iterators work properly?
我一直想知道为什么我的 std::vector<int>
没有得到排序,我意识到 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()
只是预分配 space,因此后续追加将不需要(尽可能多的)重新分配——它不会 resize 向量。要调整它的大小,您需要... resize()
。 :)
std::vector<T>
分别跟踪其自身的 size(元素数量)和 capacity(它可以处理的最大元素数量)包含而不需要重新分配)。查看 reserve()
不改变大小的最简单方法是在 reserve()
之后调用向量上的 size()
。你会看到矢量仍然 "believes" 它的大小是 0.
我一直想知道为什么我的 std::vector<int>
没有得到排序,我意识到 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()
只是预分配 space,因此后续追加将不需要(尽可能多的)重新分配——它不会 resize 向量。要调整它的大小,您需要... resize()
。 :)
std::vector<T>
分别跟踪其自身的 size(元素数量)和 capacity(它可以处理的最大元素数量)包含而不需要重新分配)。查看 reserve()
不改变大小的最简单方法是在 reserve()
之后调用向量上的 size()
。你会看到矢量仍然 "believes" 它的大小是 0.