簡體   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