gpt4 book ai didi

c++ - 算法不适用于非常量对象的 const_iterator

转载 作者:行者123 更新时间:2023-11-28 01:15:24 24 4
gpt4 key购买 nike

我正在从这本名为 Accelerated C++ 的书中学习 C++。一章有这个函数“split”,它接受从“getline”读取的字符串并返回一个充满分离词的 vector 。

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 只是意味着接收它的函数不能修改对象。对象本身在传递函数中可以是 non_const。请解释的人。

最佳答案

i 是一个常量迭代器,但它是用一个可变迭代器初始化的。这是一个有效的转换。但是 find_if() 的第二个参数没有发生这样的转换,它是非常量 string::end() 返回的值,因此模板参数推导中的类型不匹配.

您提到的任何一个更改都会使两个迭代器成为同一类型; const 或非常量。在这种情况下,模板参数推导可以毫无问题地进行。

关于c++ - 算法不适用于非常量对象的 const_iterator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58882613/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com