c++ - 改变参数值和数量——这是合法的 C++ 吗?

标签 c++ string stl iterator tokenize

我正在尝试声明以下两个函数以将标记化字符串重新组合在一起(分解为 vector 或其他与迭代器兼容的数据结构):

std::string ComposeTokens(std::vector<std::string> Tokens);
std::string ComposeTokens(std::iterator first, std::iterator last);

在实现文件中(这里没有提供——这是相当明显的),Visual Studio 的 IntelliSense 没有将任何一个实现识别为有效,说这两个都与两个声明冲突。编译会产生一条消息,指出迭代器必须有一个模板。

这里有什么方法可以做我想做的事吗?声明 iterator 是否有效,我是否需要指针等? STL 或 Boost 或其他一些库是否已经这样做了?

最佳答案

std::iterator 是一个基类模板,它至少需要定义一个类别和一个类类型。

您通常不会以这种方式定义迭代器 - 您可以使用模板来定义它:

template <typename Iterator>
std::string ComposeTokens(Iterator first, Iterator last);

此外,您可能希望通过引用传递 vector :

std::string ComposeTokens(std::vector<std::string>& Tokens);

关于c++ - 改变参数值和数量——这是合法的 C++ 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11444793/

相关文章:

java - 获取字符串的像素

java - 删除大型 Java 字符串的部分(它包含 HTML 源代码)

c++ - STL容器作为函数中的模板参数,调用错误

c++ - 模式名称,将值存储为函数中的静态变量

C++ 检测函数是否被 Hook (32 位机器)

c++ - std::map<K, V>::mapped_type 有什么限制?

C++ 内联 lambda 参数

c++ - 为什么我的(重新)实现 strlen 是错误的?

python - 有没有一种简单的方法可以将 std::list<double> 转换为 Python 列表?

c++ - 使用 vector<int>::size_type 和普通整数有什么区别?