c++ - STL 中基于容器的重载

标签 c++ stl

<分区>

我经常发现自己使用依赖于开始迭代器和结束迭代器的标准算法。为什么标准不包括将容器作为参数(而不是迭代器)的重载。是否有技术原因不在标准中包含此类内容?

template <typename ContainerT, typename ValueT>
typename ContainerT::iterator find(ContainerT& container, const ValueT& value)
{
    return std::find(begin(container), end(container), value);
}

这在搜索整个 vector 时非常方便。我意识到如果您不想遍历整个容器,仍然需要显式迭代器版本。

std::vector<std::string> v;
v.push_back("foo");
v.push_back("bar");

std::find(v.begin(), v.end(), "bar");

find(v, "bar"); // much nicer! :)

最佳答案

请参阅此处以获得好的答案:STL algorithms: Why no additional interface for containers (additional to iterator pairs)?

(抱歉,我不能标记为重复)

关于c++ - STL 中基于容器的重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20455281/

相关文章:

c++ - 正确退出 gtkmm 应用程序

c++ - 结构中的数组

c++ - 如何更改 map 中一对的值

c++ - std::sort 如何仅使用迭代器实现交换操作?

C++ 优先字典

c++ - 我们可以在一个 STL 列表中保存 2 种数据类型吗?

c++ - Visual Studio npcc64_60.dll 陷阱?

c++ - 为什么C++标准要保留这样一个冗余函数呢?

C++读取文件循环搞砸了

具有值类型 std::map 的 C++ std::map