繁体   English   中英

std :: cin >> vector [i]不能让迭代器正常工作吗?

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM