【问题标题】:taking input into vector using for-range loop使用 for-range 循环将输入输入向量
【发布时间】:2021-06-23 07:19:43
【问题描述】:

首先,我希望我的用户告诉我他必须输入多少个数字?这将在初始化为零的向量中创建该数量的元素。然后我想用 用于将元素插入向量的 for-range 循环,类似地,另一个用于显示向量元素的 for-range 循环。

#include<iostream>
#include<vector>
using std::cout;
using std::vector;
using std::cin;

int main(){
  int c;
  cin>>c;
  vector<int> ivec(c); 
  
  for(int i : ivec){ //for taking input and adding it into vector 
    cin>>i;
    ivec.push_back(i);
  }

  for(int i: ivec){ //displaying the vector 
    cout<<i<< "\t";
    }
 

  return 0;
}

但我的输出与我的预期非常不同。

我的实际输出如下:-

输出:-

3
4
5
6
0 0 0 4 5 6 

有人可以解释一下吗?我真的可以使用 for-range 循环来插入向量元素吗?

【问题讨论】:

  • 您显示的输出是实际还是预期输出?如果是实际输出,那么预期输出是多少?导致意外输出的输入是什么?
  • 您是否尝试过调试您的程序?例如,在您监视变量及其值的同时,在调试器中逐语句逐句执行代码?

标签: c++ vector input


【解决方案1】:

std::vector 有 2 种尺寸。 一个是实际使用的大小,一个是保留的大小。

下面创建一个具有实际大小 n 的向量。

std::vector<int> v(size_type n)

虽然这会创建一个具有空大小和保留大小n 的向量。

std::vector<int> v;
v.reserve(n);

std::vector&lt;T&gt;::push_back() 最后将 actual-size 增加 1。
所以你的代码是

  1. 实际尺寸c创建一个向量。
  2. 在后面添加元素。

所以你应该把你的代码替换为

std::vector<int> vec(c);
for(auto& i : ivec){
  cin>>i;
}

这将创建一个大小为cvector 并修改其元素。

或者

std::vector<int> vec;
for(int i=0; i<c; ++i) {
  int temp;
  std::cin >> temp;
  vec.push_back(temp);
}

这会创建一个空的vector 并将元素推到最后。

请参阅cppreference 了解更多信息。

【讨论】:

  • 是的,谢谢,但是你能解释一下为什么我需要在这里使用参考吗?以及为什么我的代码不起作用。你说的我没听懂?我知道它已经创建了大小为 c 的向量,那么 ivec.push_back(i) 是如何推动该向量的?
  • @Shubharthak std::vector 有 2 种尺寸。一个是实际使用的大小,另一个是容量大小,即预先分配的内存大小。我认为你混淆了两者。我会在我的回答中添加更多描述。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-21
  • 2020-09-12
  • 1970-01-01
  • 2013-05-15
  • 2012-11-23
  • 2021-12-08
  • 2021-05-08
相关资源
最近更新 更多