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

如何将字符串迭代器传递给其他函数

如何解决如何将字符串迭代器传递给其他函数

我有这段代码尝试使用 count 迭代器调用 std::string,但由于编译错误而失败。

#include <iostream>
#include <algorithm>

int count(std::string::iterator iter,char ch)
{
    int n = 0;
    while (*iter == ch) {
        n++;
        iter++;
    }
    return n;
}

void search(std::string const& str,char ch)
{
    auto iter = std::find(str.begin(),str.end(),ch);
    
    if (iter != str.end()) {
        int n = count(iter,ch);
        std::cout << n << " consecutive '" << ch << "' found";
    } else {
        std::cout << "no char found";
    }
    
    std::cout << std::endl;
}

int main()
{
    std::string line;
    
    while (std::getline(std::cin,line)) {
        search(line,'a');
    }
        
    return 0;
}

我得到的错误

00.cpp: In function 'void search(const string&,char)':
00.cpp:19:31: error: no matching function for call to 'count(__gnu_cxx::__normal_iterator >&,char&)'

我发现如果我在函数 std::string::iterator 中将完整类型 auto 更改为 count 并让编译器推断它会按预期工作的类型(或者至少我认为它作品)。为什么?

解决方法

str被标记为const,那么从中取出的迭代器,即iter的类型是std::string::const_iterator,不能转换为{{1} }} 隐式传递给 std::string::iterator

由于count不会修改count指向的元素,所以你可以让iter也带count

const_iterator

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