질문 : 제이는 친구의 커피 잔을 빌려했다은 범위 오류 중
어떻게 든 그것을 잃었다. 친구는 그 사실을 알게되었을 때 매우 화가 나서 Jay는 그의 친구에게 손상을 통제하기 위해 교체 용 찻잔을 사기로 결정했습니다. 불행히도 Jay는 그가 빌린 머그잔의 색깔을 기억하지 않습니다. 그는 단지 색이 흰색, 검정색, 파란색, 빨간색 또는 노란색 중 하나라는 것을 알고 있습니다. 제이 (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;
}
경향이 덜 오류가있는 알고리즘을 사용하는 것이 더 나은. 이것은 종종 여러 가지 문제를 제시하며 그 중 하나는 방금 만났습니다. [지우기 삭제 관용구] (http://en.wikipedia.org/wiki/Erase-remove_idiom)를 조사해야합니다. 이에 대한 좋은 토론은 [this post] (http://stackoverflow.com/questions/347441/erasing-elements-from-a-vector)에서 볼 수 있습니다. – CoryKramer