如何对向量的元素进行排序?

时间:2019-10-12 16:30:22

标签: c++

我正在尝试输入一些值,然后将这些值放入向量中。然后按升序对它们进行排序,然后获得最小值和最大值。 每次我运行该程序时都会崩溃。

int main()
{
    int min_value = 0;
    int max_value = 0;
    int input_value;

    vector<int> value;

    cout << "Put four natural numbers as input: ";

    while (cin >> input_value) {
        if (input_value < min_value) {
            min_value = input_value;
            value.push_back(min_value);
        }

        else if (input_value > max_value) {
            max_value = input_value;
            value.push_back(max_value);
        }
    }

    std::sort(value.begin(), value.end());

    cout << "The smallest value you entered is " << value[0] << endl;
    cout << "The largest value you entered is " << value[value.size() - 1] << endl;
    system("pause");

    return 0;
}

很好的答案

2 个答案:

答案 0 :(得分:0)

int main()

{

int min_value;

int max_value = 0;

int input_value = 0;



vector<int> value;



cout << "Put four natural numbers as input: ";



while (cin >> input_value) {

    if (input_value < min_value) {

        min_value = input_value;

        value.push_back(min_value);

    }

    else if (input_value > max_value) {

        max_value = input_value;

        value.push_back(max_value);

    }

}



std::sort(value.begin(), value.end());



cout << "The smallest value you entered is " << value[0] << endl;

cout << "The largest value you entered is " << value[value.size() - 1] << endl;



system("pause");



return 0;

} 上面的代码正常工作

答案 1 :(得分:0)

int main() {
  // Initialize the minimum with a large enough value.
  int min_value = 10000;
  // Initialize the maximum with a small enough value.
  int max_value = -10000;

  std::vector<int> value;
  {
    int input_value;
    while (std::cin >> input_value) {
      // Both "if" are necessary.
      if (input_value < min_value) {
        min_value = input_value;
      }
      if (input_value > max_value) {
        max_value = input_value;
      }
      value.push_back(input_value);
    }
  }

  if (value.empty()) {
    // Do something & early return.
    std::cout << "Empty input" << std::endl;
  } else {
    // Curious about why use std::sort here since you have already had max &
    // min. But if you want ...
    std::sort(value.begin(), value.end());
    std::cout << "The smallest value you entered is " << value.front()
              << std::endl;
    std::cout << "The largest value you entered is " << value.back();
  }
  return 0;
}

您的答案中的代码似乎起作用的原因是,在这种情况下,未初始化的局部变量min_value将被赋予“随机”值,并且被赋予较大的正值。因此,这使您的解决方案“有效”。

但是仍然存在一些问题。

  1. 未初始化的变量很危险,这使您的解决方案无法始终起作用。显式初始化您的min_value和max_value。

  2. “其他”是错误的。请考虑输入中仅包含一个元素的情况。在这种情况下,您无法捕获max_value。

  3. 在访问向量之前检查向量是否为空。访问空向量将引发异常。

  4. 还考虑负输入。

相关问题