草庐IT

c++ - 使用 for 循环删除 vector 中的元素

如何使用for循环按索引从vector中删除元素?我收到vector超出范围错误。我在下面有一个示例代码。vectorto_erase={0,1,2};vectordata={3,3,3,3};for(inti=0;i我认为这是因为我的vector的大小在每次迭代中都减小了,因此它无法访问索引2。 最佳答案 您通常会使用erase–removeidiom有效地从vector中删除多个元素(一个一个地删除它们通常效率较低,而且正如您所见,并不总是微不足道的)。在其最一般的形式中,成语看起来像这样:data.erase(remove_a

c++ - vector::erase 是否不适用于反向迭代器?

下面的代码不会编译some_vector.erase(some_vector.rbegin(),some_vector.rbegin()+1);这只是一个例子,我知道删除最后n个元素有更好的选择。GCC告诉我删除没有匹配的功能。我做错了什么或删除不适用于反向迭代器吗?不过,它与前向迭代器一起工作得很好 最佳答案 事实并非如此。但是,反向迭代器提供了一个base()方法来获取正向迭代器。请注意,返回的正向迭代器指向反向迭代器指向的元素之后的元素。或者,换句话说,.rbegin().base()==.end()和.rend().base

c++ - 我如何调整 erase-remove 习语来处理 vector 元组?

我有一个包含成员j、k和l的元组vector。我正在尝试调整erase-remove习语,以便在.k成员的值满足特定条件时我可以删除整个元组。我尝试使用标准的.erase(removeif())方法,其中谓词引用元组成员位置,但被告知相关vector类没有成员“k”。vec_list_iter_exp_out.erase(std::remove_if(vec_list_iter_exp_out.begin(),vec_list_iter_exp_out.end(),vec_list_iter_exp_out.k我希望如果vec_list_iter_exp_out包含以下假设值:vec_

c++ - vector<T>.erase() 与 g++ 的问题

以下代码在msvc上构建时没有错误,但在g++上无法编译。if(*it==listener){it=listeners.erase(it);}错误在于删除,完整代码为:voidAguiListener::removeListener(AguiWidget*listener){for(std::vector::const_iteratorit=listeners.begin();it!=listeners.end();++it){if(*it==listener){it=listeners.erase(it);}}}听众是:std::vectorlisteners;但是g++吐出大量错误

c++ - 有效删除 tr1::unordered_map 中的元素

我正在试验tr1::unordered_map并偶然发现了如何解决这个问题有效地删除元素。“删除”方法提供按键删除或通过迭代器。我认为后者更有效率,因为前者大概涉及隐式查找操作。另一方面,我的调查网上有透露迭代器调用后可能会失效insert()方法。我对典型的现实世界情况感兴趣,其中将对象放入哈希表有一个足够长的生命周期,以便在此期间调用insert()生命周期。因此我可以得出结论,在这种情况下,按键删除是唯一的还剩选项?有没有其他方法可以更有效地删除对象?我是充分意识到这个问题只在发生删除的应用程序中很重要经常。我当前的项目是否会出现这种情况,还有待观察,但是我宁愿在设计我的项目时了

c++ - STL 允许使用指向不同 map 的迭代器删除 map 的键/值吗?

所以,我偶然发现的是:std::mapmap1;std::mapmap2;map1[2.5]=11;map1[3.5]=12;map2[2.5]=21;map2[3.5]=22;std::map::iteratoriterMap1=map1.find(2.5);//Iwillnowtrytoeraseakey/valuepairinmap2withaniterator//thatpointstomap1.Thisisbad/wrong.ButIamsurprised//thisisallowed.map2.erase(iterMap1);//whatdoyouthinkwouldbep

c++ - string pop_back 是如何在常数时间内实现的?

std::stringpop_back():移除字符串的最后一个元素在C++规范中说C++11字符串类函数pop_back具有常数时间复杂度。(更准确地说-未指定但通常不变)http://www.cplusplus.com/reference/string/string/pop_back/除此之外,我阅读了C++11规范草案,据说pop_back等于str.erase(str.length()-1)。据我所知,删除功能只是分配新的内存量并将剩余的元素(未删除)复制到该内存中,这将花费线性时间。鉴于此,pop_back如何在恒定时间内完成。 最佳答案

c++ - 使用 std::vector.erase(begin(), end()) 或 std::vector.erase(begin(), begin()) 安全吗?

我想处理vector中的元素一段时间。为了优化这一点,我不想在处理项目时删除它,而是在最后删除所有已处理的项目。vector::iteratorit;for(it=items.begin();it!=items.end();++it){DoSomething(*it);if(TimeIsUp()){break;}}items.erase(items.begin(),it);当it==items.end()时使用erase是否安全?在文档中说erase()将删除[first,last)并且这应该是安全的,但我想确定。编辑:使用std::vector.erase(begin(),begin

c++ - 以下结合了 erase 和 remove 的语法是什么意思?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Differencebetweeneraseandremove假设我有一个容器....以下是什么意思。c.erase(remove(c.begin(),c.end(),99),c.end());删除和删除不是一样的吗?上面例子中erase和remove的具体作用是什么?

c++ - std::string erase 删除最后一个字母

我想为游戏输入一些内容,然后在按退格键后删除字符串中的最后一个字母。我不确定是否应该执行text.end-1或+1到end来执行此操作:if(GetAsyncKeyState(VK_BACK))text.erase(text.end-1,text.end); 最佳答案 std::string实际上有一个pop_back()方法!所以你可以这样做:if(GetAsyncKeyState(VK_BACK)&&!text.empty()){text.pop_back();} 关于c++-std