Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何对向量的元素进行排序?_C++ - Fatal编程技术网

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

C++ 如何对向量的元素进行排序?,c++,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 >>

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

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;
}
良好的答案将受到欢迎

int main

{

} 上述代码正在运行

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_值将被赋予一个随机值,并且在本例中被赋予一个较大的正值。因此,这使您的解决方案起作用

但仍然存在一些问题

未初始化的变量是危险的,它使您的解决方案无法一直工作。显式初始化最小值和最大值

否则就错了。请考虑输入中只有一个元素的情况。在这种情况下,无法捕捉最大值

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

还要考虑负面输入


你为什么不做一个int i的循环;i> 输入_值;value.push_backinput_value;}?如果使用调试器运行,您将看到错误所在。检查您的if条件以及最小值和最大值的起始值。四个值的限制因子在哪里?也就是说,整个while循环和其中的所有逻辑看起来都是错误的。其次,如果while块中的伪逻辑导致一个空向量,那么很容易发现cout语句中的两个表达式最后都会调用未定义的行为,试图引用不存在的元素。
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;
}