预先表示歉意,我对C++相对来说是个新手,我收到了一些代码,我正试图把这些代码写成正面或反面。
代码正在创建一个定义大小的vector<vector<double>::iterator>,然后从正在创建的另一个vector中为其分配.end(),如……
vector<vector<double>::iterator> treatment_begin(50), treatment_end(50);
for(i = 0; i < 50; ++i){
treatment_begin[i] = treatment_sorted.end();
treatment_sorted.push_back(values_vector[i]);
treatment_end[i] = treatment_sorted.end();
}所以,正如我所理解的,在迭代器上设置,然后向向量添加一个值,然后设置另一个迭代器。但是我遇到了一些问题,treatment_end的最后一个迭代器是类似于-9.7458369411281581e+297的,然后在后面的代码中尝试使用treatment_end迭代器,然后像这样爆炸.
treatment_left.insert(treatment_left.end(),treatment_begin[49],treatment_end[49] );具体来说,它给出了一个“范围内的向量迭代器不同于容器”。我猜问题不在于最后的插入本身,而是treatment_end是如何在第一个代码块中构建的。再次抱歉,如果这是一个愚蠢的问题,我就是无法思考这段代码的错误之处以及正确的方法应该是什么。谢谢你的帮助!
发布于 2020-04-28 21:39:52
您已经得到了具有未定义行为的代码。
treatment_begin的每个元素以及treatment_end的最后一个元素都是无效的迭代器。它们没有指向treatment_sorted的元素
std::vector::push_back( const T& value );
,如果新的
size()大于capacity(),那么所有迭代器和引用(包括过去的结束迭代器)都无效。否则,只有过去结束迭代器无效。
即使您完成了对treatment_sorted的所有插入,在treatment_begin[0]中也没有“启动前”迭代器。
你需要回到原来的作者那里去找出这意味着什么。
https://stackoverflow.com/questions/61488649
复制相似问题