while 루프를 사용하여 구조체의 (정렬 된!) 벡터를 통과하는 짧은 코드를 작성하고 해당 가격을 기반으로 새 요소를 삽입합니다디버그 어설 션이 실패했습니다. Visual Studio 2015 : 반복자 벡터가 아닌 벡터 반복자
g++
과 Sublime Text 3을 사용하면 모든 것이 작동하지만 (이 질문의 끝에 출력 됨) Visual Studio 2015를 사용하면 오류가 발생합니다. Debug Assertion Failed! ... Expression: vector iterator not dereferencable
.이 오류는 새 요소를 struc newEl = {5, 2.0}
으로 변경하는 경우 기존 요소의 끝에 새 요소를 연결해야하는 경우에만 나타납니다 (VS와 g++
모두 제대로 작동 함).
코드는 다음과 같습니다
이#include <iostream>
#include <vector>
struct struc {
int num;
double price;
};
int main() {
std::vector<struc> v = { { 1, 1.5 },{ 2, 1.6 },{ 3, 2 },{ 4, 2.6 } };
struc newEl = { 5, 2.7 };
std::vector<struc>::iterator it = v.begin();
while (((*it).price <= newEl.price) && (it < v.end())) {
it++;
}
v.insert(it, newEl);
for (struc vec : v) {
std::cout << vec.num << ", " << vec.price << std::endl;
}
std::cout << "Finished";
return 0;
}
출력이되어야한다 (그리고 g++
의 경우와 ST에) :
1, 1.5
2, 1.6
3, 2
4, 2.6
5, 2.7
Finished
이제 내 질문에, 무슨 VS에서 오류가 발생한다 VS에서 작동하도록 변경하려면 무엇이 필요합니까?
대단히 감사합니다!
그것으로 문제가 해결됩니다. 바보 증명에 대해서도 설명해 주셔서 감사합니다 (이해할 수 있음).왜 ST +'g ++'가 VS와는 반대로 작동하는지 알고 있습니까? – David
@David 나는 내 대답을 약간 마무리했다. – BoBTFish
Wonderful, 나는 당신의 블로그를 읽고'std :: endl'로 당신의 발언을 만났습니다. 나는 그것을 염두에 두겠다! 철저한 답변을 해주셔서 다시 한 번 감사드립니다! – David