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.