下面的代码让我觉得“Debug Assertion Failed!”错误。我想我已将其分离为:questions.erase(questions.begin() + number);
代码的目标是随机询问测试库矢量“问题”中的一个问题。我还没有输入所有问题,因为我试图弄清楚手头的机制。
提前感谢您的帮助!
int nomen()
{
int number;
string ans = "No Answer";
cout << "\nIn the Nomenclature Game you will be asked to name chemical compounds or give their UPAC symbols." << endl;
vector<string> questions;
vector<string> answers;
questions.push_back("MgO");
answers.push_back("magnesium oxide");
srand((unsigned)time(0));
number = (rand () % questions.size()) + 1;
for (int i = 0; i < questions.size(); ++i)
{
cout << questions[number] << endl;
questions.erase(questions.begin() + number);
}
return 0;
}
答案 0 :(得分:0)
questions.erase(questions.begin() + number);
不在数组的末尾。
questions.begin()
相当于位置0和
number
等于questions.size()
所以0 + size = size
是向量结尾的1。
答案 1 :(得分:0)
此表达式
number = (rand () % questions.size()) + 1;
产生1(当rand()返回除0之外的任何值)或2(当rand()返回0时)。
您的矢量大小等于1.
因此在本声明中
questions.erase(questions.begin() + number);
如果number等于2,则迭代器questions.begin() + number
无效。如果number等于1,则questions.begin() + number
等效
到questions.end()
同样在循环中
for (int i = 0; i < questions.size(); ++i)
{
cout << questions[number] << endl;
questions.erase(questions.begin() + number);
}
您正试图删除在前一次迭代中可以删除的相同元素。