gpt4 book ai didi

c++ - std::cin >> vector[i] 不会让迭代器正常工作?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:37:56 25 4
gpt4 key购买 nike

我一直在想为什么我的 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()只是预分配空间,这样后续的追加就不需要(尽可能多的)重新分配——它不会调整 vector 。要调整它的大小,您需要... resize() . :)

std::vector<T>分别跟踪其自身的大小(元素数量)和容量(无需重新分配即可包含的最大元素数量)。查看 reserve() 的最简单方法不改变大小是通过调用 size()reserve() 之后的 vector 上.您会看到 vector 仍然“相信”它的大小为 0。

关于c++ - std::cin >> vector[i] 不会让迭代器正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28311525/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com