首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置vector<vector<double>::iterator>

设置vector<vector<double>::iterator>
EN

Stack Overflow用户
提问于 2020-04-28 19:43:10
回答 1查看 57关注 0票数 0

预先表示歉意,我对C++相对来说是个新手,我收到了一些代码,我正试图把这些代码写成正面或反面。

代码正在创建一个定义大小的vector<vector<double>::iterator>,然后从正在创建的另一个vector中为其分配.end(),如……

代码语言:javascript
复制
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迭代器,然后像这样爆炸.

代码语言:javascript
复制
treatment_left.insert(treatment_left.end(),treatment_begin[49],treatment_end[49] );

具体来说,它给出了一个“范围内的向量迭代器不同于容器”。我猜问题不在于最后的插入本身,而是treatment_end是如何在第一个代码块中构建的。再次抱歉,如果这是一个愚蠢的问题,我就是无法思考这段代码的错误之处以及正确的方法应该是什么。谢谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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]中也没有“启动前”迭代器。

你需要回到原来的作者那里去找出这意味着什么。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61488649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档