잃어 버렸습니다 : ++ 전에 함수 호출 (Z_UB-> set())이 없으면 std :: string 벡터의 반복자가 완벽하게 작동합니다. 나는이 같은 함수 호출을 이동하는 경우C++ 반복자가 무작위로 무효화됩니다.
std::vector<std::string>::iterator it = g_SPP.scenarios->getVector().begin();
std::cout << "begin of vector: " << *it << std::endl;
Z_UB->set("s1", "scn2", 350);
it++;
std::cout << "second of vector: " << *it << std::endl;
, 그러나 다음과 같은 출력
begin of vector: scn1
만듭니다 : 다음은 코드의
std::vector<std::string>::iterator it = g_SPP.scenarios->getVector().begin();
std::cout << "begin of vector: " << *it << std::endl;
it++;
std::cout << "second of vector: " << *it << std::endl;
Z_UB->set("s1", "scn2", 350);
을 결과는 기대 이하입니다되는 행동 :
begin of vector: scn1
second of vector: scn2
는 Z_UB-> 설정() 함수 내부가 아무것도 남아 없지만 호출 자체 : 나는이 프로그램을 충돌합니다에 액세스 반복자를 생성 한 후 나는 Z_UB-> 설정() 함수를 호출한다면
void Parameter::set(std::string _i, std::string _j, float value) {
//int i = indexSets[0]->backIndex(_i);
//int j = indexSets[1]->backIndex(_j);
//data2D[0][0] = value;
}
. Iterators에 대해 놓친 중요한 것이 있습니까?
특정 문제를 진단하는 데 충분한 정보가 없습니다. 반복자는 "무작위로"무효화되지 않으므로 문제는 코드에 있지만이 게시물에서 명확하지 않습니다. 코드에서 문제가 발생합니다. 'Z_UB'는 실제로'Parameter' 타입입니까? 다른 유형이있을 수 있으며, 기본 '벡터'를 수정하는 것이 있습니까? 'vector' iterators는'vector' 내부 저장소의 크기를 변경하는 동안 무효화됩니다. – Chad
getVector()는 벡터 또는 복사본에 대한 참조를 반환합니까? –
벡터 복사본을 반환합니다 (&를 사용하지 않았기 때문에) – buhmann