用C ++创建对象列表

时间:2015-02-01 18:28:37

标签: c++

我在Python中有相当多的知识,但我已经过渡到C ++。我有一个程序要求用户输入一个号码并继续循环,直到用户输入一定数量才能停止。我需要做的是创建用户输入的数字列表,然后在完成循环时,找到数字的最大值,最小值和平均值。在Python中,这是通过声明一个空列表来完成的,但我似乎无法弄清楚如何在C ++中执行此操作。任何建议都会有所帮助。

2 个答案:

答案 0 :(得分:2)

我没有足够的代表。评论,所以这是一个实现。 std :: vector的push_back()函数就是你要找的东西。 www.cplusplus.com是我最喜欢的STL在线参考:http://www.cplusplus.com/reference/vector/vector/

#include <iostream>
#include <vector>
using namespace std;

int main()
{
   const int STOP_NUM = 0;
   cout << "Enter numbers. " << STOP_NUM << " to stop." << endl;

   vector<int> myNums;
   int num;

   while( cin >> num && num != STOP_NUM )
      myNums.push_back(num);

   if( myNums.size() > 0 )
   {
      int min=myNums[0], max=myNums[0], sum=0;
      for( const auto &num : myNums )
      {
         sum += num;
         if( num < min ) min = num;
         if( num > max ) max = num;
      }

      cout << "min: " << min << "\n";
      cout << "max: " << max << "\n";
      cout << "avg: " << static_cast<float>(sum)/myNums.size() << endl;
   }
}

答案 1 :(得分:0)

我提供的第一个实现遵循您的要求。这种实现没有,但是对于输入的中等到大量数字,它会使用更少的内存。此实现(以及现在的cnt)仍存在溢出溢出的可能性。

#include <iostream>
using namespace std;

int main()
{
   const int STOP_NUM = 0;
   cout << "Enter numbers. " << STOP_NUM << " to stop." << endl;

   bool first = true;
   int num;
   int min, max, sum=0, cnt=0;

   while( cin >> num && num != STOP_NUM )
   {
      if(first)
      {
         min = max = sum = num;
         first = false;
      }
      else
      {
         sum += num;
         if( num < min ) min = num;
         if( num > max ) max = num;
      }
      ++cnt;
   }

   if( cnt > 0 )
   {
      cout << "min: " << min << "\n";
      cout << "max: " << max << "\n";
      cout << "avg: " << static_cast<float>(sum)/cnt << endl;
   }
}