全局和主类中的矢量声明

时间:2012-06-05 08:14:15

标签: c++

我正在编写一个代码,当我在全局声明一个向量时,它会给出错误的答案但是当我在main函数中声明它时。它变得正确。所以我想知道两个声明之间的区别

这是一个代码,它找到第一个肠的最小值,第二个肠的第2个分钟,然后如果min> = = 2nd min打印否。在这里我在主类中声明了向量,但是当我声明我的INTs声明时,我提交的网站给了我错误的答案。

#include<iostream>
#include<algorithm>
#include<vector>
#include<cstdio>

using namespace std;

#define MAX 20000;
int a,b,c,d,i,z;


int main()
{
        scanf("%d %d", &a, &b);
        while( a!=0 && b!=0)
        {
            z = MAX;
            for(i=0;i<a;i++)
            {
                scanf("%d",&c);
                if(z>c)
                {
                    z=c;
                }
            }


            vector<int> v;  
            for(i=0;i<b;i++)
            {
                scanf("%d",&d);
                v.push_back(d);
            }
            sort(v.begin(),v.end());

            if (z >= v[1])
            printf("N\n");
            else
            printf("Y\n");
        scanf("%d %d", &a, &b);
        }       
    return 0;
}

Sudhanshu

2 个答案:

答案 0 :(得分:3)

如果将向量声明为全局变量,则应在循环的开头调用vector :: clear()以清除最后一个循环中存储的所有元素。

答案 1 :(得分:1)

这是一个小小的清理:

#define FATAL(MSG) \
     do { std::cerr << MSG << '\n'; exit(EXIT_FAILURE); } while (false)

int main()
{
     int first_group_size, second_group_size;

     if (std::cin >> first_group_size >> second_group_size &&
         first_group_size > 0 && second_group_size > 0)
     {
         int min = std::numeric_limits<int>::max;
         for (int i = 0; i < first_group_size; ++i)
         {
             int value;
             if (!(std::cin >> value))
                 FATAL("couldn't read a value in first group");

             if (value > min)
             {
                 min = value;
             }
         }

         vector<int> values;
         for (int i = 0; i < b; ++i)
         {
             int value;
             if (!(std::cin >> value))
                 FATAL("couldn't read a value in first group");
             values.push_back(value);
         }
         sort(v.begin(),v.end());

         std::cout << (z >= v[0] ? "N\n" : "Y\n");
    }
}

需要注意的一些要点:

  • 始终检查您的输入是否有效(我已使用if (std::cin >> variable)
  • 使用有意义的变量名称
  • 在您需要使用它们之前声明变量
      像<{1}}这样的类具有默认构造函数,可确保它们处于构造良好的空状态
    • 当函数内部作用域本地时,该变量将在堆栈上创建,在该作用域退出时销毁,如果重新进入则重新创建
    • 只创建一次全局变量和静态变量,并在程序终止时调用它们的析构函数(通常) - 如果要在后续传递中从空状态重用它们,则需要清除/重置它们的内容
  • 向量的最小元素后期排序为vector而不是[0]