![](/img/trans.png)
[英]erase gets const_iterator but is called with iterator (non-const)
[英]Algorithm not working on const_iterator for non-const object
我正在从这本名为 Accelerated C++ 的书中学习 C++。 一章有这个 function "split",它从 'getline' 读取一个字符串并返回一个填充了分隔词的向量。
vector<string> split(string s)
{
vector<string> ret;
typedef string::const_iterator iter;
iter i = s.begin();
while(i != s.end())
{
i = find_if(i,s.end(),not_space);
iter j = find_if(i,s.end(),space);
if(i != s.end())
ret.push_back(string(i,j));
i = j;
}
return ret;
}
略有不同的是,书本版本将字符串收集为 const 参考。 编译器显示 find_if 的参数不匹配的错误。 但是当我将 split 的参数更改为 const 或将 iterator 更改为 non_const 时,它可以工作。 我不明白这种行为。 我认为传递一个 const_iterator 只是意味着接收它的 function 不能修改 object。 object 本身在传递函数中可以是 non_const。 请解释一下。
i
是一个常量迭代器,但它是用一个可变迭代器初始化的。 这是一个有效的转换。 但是find_if()
的第二个参数没有发生这种转换,它是非常量string::end()
返回的值,因此模板参数推导中的类型不匹配。
您提到的任何一项更改都使两个迭代器的类型相同; 常量或非常量。 在这种情况下,模板参数推导没有问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.