
std::vector<std::string>
我不知道如何从矢量中删除一个字符串元素,而不会通过它遍历并搜索匹配的字符串元素.
bool remove(vector<string> & msgs,string toRemove) {if (msgs.size() > 0) { vector<string>::iterator it = msgs.end() - 1; while (it >= msgs.begin()) { string remove = it->data(); if (remove == toRemove) { //std::cout << "removing '" << it->data() << "'\n"; msgs.erase(it); return true; } it--; }} return false; }
专业C程序员在这种情况下做什么?你每次写出实现吗?您是否创建自己的容器类,您自己的帮助函数库,还是建议使用另一个库,即Boost(即使您在Visual Studio中编程windows)?或者是其他东西?
(如果上述删除 *** 作需要工作,请留下另一种做法的方法,谢谢.)
解决方法 您将使用“删除和删除成语”:v.erase(std::remove(v.begin(),v.end(),mystring),v.end());
要点是,向量是一个序列容器,不适用于按值 *** 作.根据您的设计需求,不同的标准库容器可能更合适.
请注意,删除算法只是重新排列范围的元素,它不会从容器中删除任何内容.这是因为迭代器不携带有关其容器的信息,这是完全有意的:通过将迭代器与容器分开,可以编写在任何明智的容器上工作的通用算法.
惯用现代C将尽可能地遵循该模式:通过迭代器展开数据,并使用通用算法来 *** 纵它.
总结以上是内存溢出为你收集整理的C专业程序员如何实现常见的抽象?全部内容,希望文章能够帮你解决C专业程序员如何实现常见的抽象?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)