【问题标题】:writing integer input to vector container in C++在 C++ 中将整数输入写入向量容器
【发布时间】:2011-02-15 08:05:03
【问题描述】:

同样我们在数组中做

for (.....)
  cin>>a[i];

我们如何使用向量来做到这一点。我声明了一个整数向量

vector<int> v;

现在我需要从控制台获取输入并将它们添加到向量中。我正在使用向量,因为我不知道限制。

【问题讨论】:

  • for (;;) { cin >> tmp; v.push_back(tmp); if (tmp == someValue) 中断; }
  • 如果你从键盘输入 someValue 循环将关闭
  • How to cin to a vector的可能重复

标签: c++ vector user-input


【解决方案1】:

从控制台向向量插入整数并打印所有内容:

int input;
vector<int> v;
while(cin >> input){
 v.push_back(input);
}

for(int i = 0; i<v.size(); i++){
 cout<< v[i] <<endl;
}

矢量还提供了打印出最大尺寸的功能:

cout << v.max_size()<<endl;

【讨论】:

  • 很好的答案……直到你使用 max_size。
  • 我相信特立独行的意思是用户将输入的整数数量,在这种情况下,您使用向量并让它重新分配,然后处理潜在的内存不足和/或自己设置上限。 Max_size 没有告诉你任何有用的信息。
  • 我明白了.. 但我认为现在最好让@maverick 关于存在 .max_size() 或 .capacity() 因为这可能是他对 Vector 的第一个挑战 :) 如果我误解了这个问题..
  • 告诉他容量可能会有所帮助(但可能不如大小); max_size 没用。
  • 在 C 中,我们不需要将其存储在临时变量中,然后将其复制到数组中。所以,我正在寻找一个没有 temp 并且使用 STL 的答案。如果您喜欢 STL,请选择 @Eugen 或 Martin 的答案。我都喜欢。
【解决方案2】:

如果向量未使用初始容量进行初始化,则使用如下内容:

int temp;
for (...) {
    cin >> temp;
    v.push_back(temp);
}

【讨论】:

  • 即使向量的容量大于它的大小,你仍然可以使用它。
  • 确实如此。我猜“初始容量”具有误导性。我的意思是,如果您知道项目的数量,并因此将容量初始化为该数量,则无需 push_back 将其放入。您仍然可以使用 cin >> v[i]。
  • capacity 不够,还需要resize 向量。
【解决方案3】:

稍微紧凑的版本:

#include <algorithm>
#include <iostream>
#include <iterator>
#include <vector>

std::istream_iterator< int > iterBegin( std::cin ), iterEnd;

// using the range constructor
std::vector< int > vctUserInput1( iterBegin, iterEnd );

// using the copy & back_inserter
std::vector< int > vctUserInput2;
std::copy( iterBegin, iterEnd, std::back_inserter( vctUserInput2 ) );

【讨论】:

    【解决方案4】:

    试试这个

    std::copy( std::istream_iterator<int>(std::cin),
                std::istream_iterator<int>(),
                std::back_inserter( v ) );
    

    here

    您可以将其简化为仅创建向量并使用迭代器对其进行初始化:

    std::vector<int>  v(std::istream_iterator<int>{std::cin},
                        std::istream_iterator<int>{});
    

    【讨论】:

      【解决方案5】:

      最简单的解决方案是使用istream_iterator。你不想要 std::copy,很难,因为那太贪婪了。它会读取所有内容。相反,使用这个:

      std::istream_iterator<int> iter(std::cin);
      vector<int> v;
      for(.....)
         v.push_back(*iter++);
      

      【讨论】:

        【解决方案6】:

        c++中通过向量获取用户输入的小程序

        #include <bits/stdc++.h>
        using namespace std;
        
        int main()
        {
            vector<int> v1;
            int input;
            cout<<"Enter elements in vector";
              for (int i=0;i<10;i++)
               {
                 cin>>input;
                 v1.push_back(input);
               }
        
               cout<<"Elements in vector";
               for (int i=0;i<10;i++)
                {
                  cout<<v1[i]<<"\n";
                }
                 return 0;
         }
        

        【讨论】:

          【解决方案7】:

          如果没有给出输入的数量,那么我们就这样编码

          #include<iostream>
          using namespace std;
          
          #include<vector>
          
          int main()
          {
              int i ;
              vector<int> v;
              while(i != -1)
              {
                  cin >> i;
                  v.push_back(i);
              }
          }
          

          /在上面的代码中,我一直在输入,直到用户没有输入 -1。在你的问题中,还必须给出一些条件而不是输入的数量,如果给出了输入的数量,那么很容易接受输入。代码是:/

          for (i=0; i<n; i++)
          {
              cin >> i;
              v.push_back(i);
          }
          

          【讨论】:

          • 嘿Ravi,你需要在while (i ...)中使用它之前初始化int i。在代码格式化方面投入一些精力是件好事,这会为自己带来回报。您可以提到分隔的 -1 将作为最后一个元素推入向量中。
          【解决方案8】:

          您还可以动态分配一个数组,然后在向量中使用它。

          这是你可以做的,

          #include<bits/stdc++.h>
          int main()
          {
           int n;cin>>n;
           vector<int>v(n);
           for(int i=0;i<n;i++){
           cin>>v[i];
          }
          for(auto x:v){
          cout<<x<<" "<<endl;
          }
          }
          
          

          这是一种简单的方法。

          【讨论】:

          猜你喜欢
          • 2013-03-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-12-17
          • 2018-06-29
          • 2010-09-20
          • 2019-03-11
          • 2011-05-09
          相关资源
          最近更新 更多