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;
}