的问题是:超出范围的错误
杰伊借了朋友的咖啡杯和莫名其妙地失去了它。由于他的朋友在发现这件事情时会非常生气,Jay决定向他的朋友购买一个替换杯以试图控制损害。 不幸的是,杰伊不记得他借来的杯子的颜色。他只知道颜色是白色,黑色,蓝色,红色或黄色之一。杰伊绕着他的办公室问他的同事他们是否能够回忆起这种颜色,但他的朋友们似乎也不记得杯子的颜色。他们所知道的是杯子的颜色绝对不是。 根据这些信息,帮助Jay弄清楚杯子的颜色是什么。
的办法,我要去一下:我创造的所有可能的颜色矢量
:白色,黑色,蓝色,红色或黄色。然后要求用户输入他将询问的同事人数。然后采取颜色建议,并为每个条目我比较它与矢量。如果它在那里,我会弹出颜色。最终只有一种颜色会留在向量中,这是失去的杯子的颜色。
我的问题:
我得到一个出界错误输入第一个颜色后,我无法找出原因。确切的错误是:
terminate called after throwing an instance of 'std::out_of_range'
what(): vector::_M_range_check
Abort (core dumped)
我的代码是:
#include <iostream>
#include <string>
#include <algorithm>
#include <climits>
#include <stdio.h>
#include <vector>
using namespace std;
int main(int argv, char* argc[])
{
string color;
vector<string> colorVector;
colorVector.push_back("White");
colorVector.push_back("Black");
colorVector.push_back("Blue");
colorVector.push_back("Red");
colorVector.push_back("Yellow");
int numColleagues;
cout<< "Please enter the number of Colleagues" << endl;
cin >> numColleagues;
cout<< "Please enter each suggested color" << endl;
int counter = 0;
while (counter < numColleagues) {
getline(cin, color);
counter++;
for (int i = 0; i < 5; i++) {
if (colorVector.at(i) == color) {
colorVector.erase(colorVector.begin() + i);
}
}
}
return 0;
}
您正在尝试为你通过它迭代从你的载体删除元素的算法。这通常会带来很多问题,其中之一就是你遇到的问题。你应该调查[erase-remove idiom](http://en.wikipedia.org/wiki/Erase-remove_idiom)。你可以看看[这篇文章](http://stackoverflow.com/questions/347441/erasing-elements-from-a-vector)进行良好的讨论。 – CoryKramer 2014-10-10 18:17:48