微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C专业程序员如何实现常见的抽象?

我从来没有在C专业编程和使用(Visual)C作为学生.我很难处理缺乏抽象,特别是与 STL container classes.例如,矢量类不包含一个简单的删除方法,常见于许多库,例如.NET Framework.我知道有一个 erase方法,它不会使删除方法抽象足够减少操作到一行方法调用.例如,如果我有一个
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将尽可能地遵循该模式:通过迭代器展开数据,并使用通用算法来操纵它.

原文地址:https://www.jb51.cc/c/111734.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐