std::cin >>向量[i]不会让迭代器正常工作吗?

std::cin >> vector[i] won't let iterators work properly?

本文关键字:gt 常工作 迭代器 工作 向量 cin std      更新时间:2023-10-16

我一直在想为什么我的std::vector<int>没有被排序,我已经意识到当使用std::cin >> myVector[i] 时,myVector.begin()myVector.end()是相同的值(第一个索引)

看看我刚刚创建的示例代码。

#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()。你会看到向量仍然"相信"它的大小是0。