【发布时间】:2021-04-10 14:47:43
【问题描述】:
我正在解决一个问题,该问题需要我在某个点对字符串向量进行排序。它给我带来了很多问题,所以我决定提取有问题的部分,但我无法弄清楚似乎是什么问题。
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
bool myComp(string a, string b){
return a<b;
}
int main(){
vector<string> students(50000);
int i = 0;
while(true){
string input;
getline(cin, students[i]);
if(!students[i].empty()){
i++;
}
else{
break;
}
}
cout << students[2] << endl << students[1] << endl;
sort(students.begin(), students.end());
cout << students[2] << endl << students[1];
return 0;
}
起初我认为输入是错误的(问题特别要求读取直到空行),但结果证明程序在排序之前可以正常工作。如果有人能帮我解决这个问题,我将不胜感激。我已经敲了一个多小时。
【问题讨论】:
-
您的输入是什么,您的预期输出与实际输出是什么?另外,
myComp()的作用是什么?看起来你从未使用过它。 -
为什么你认为它不起作用?请注意,在对向量中的第一个
50000 - i字符串进行排序后,将为空。 -
我猜这里的问题是你用 50000 个空字符串创建了一个
vector,实际上只填充了 10-20 个值。因此,当您排序时,前 48980 个值将是空字符串。您是否有理由不只是从空向量开始并使用push_back()? -
您可以edit 您的问题包含预期的输出。如果你知道你不使用
myComp,那么也将其删除,这样你的代码就会变成minimal reproducible example。作为这里的新用户,也请带上tour并阅读How to Ask。 -
这是学习使用调试器的好时机,这样您就可以在排序前后检查向量的内容。