C++:为什么我不能将一对迭代器传递给 regex_search?

标签 c++

我尝试传递一对迭代器来表示一个字符串序列:

    #include<regex>
    #include<string>
    using namespace std;
    int main(int argc,char *argv[])
    {
        smatch results;
        string temp("abc");
        string test("abc");

        regex r(temp);
        auto iter = test.begin();
        auto end = test.end();

        if(regex_search(iter,end,results,r))
    cout<<results.str()<<endl;
        return 0;
    }

错误如下:

error: no matching function for call to ‘regex_search(__gnu_cxx::__normal_iterator >&, __gnu_cxx::__normal_iterator >&, std::smatch&, std::regex&)’ if(regex_search(iter,end,results,r))

最佳答案

您在这里遇到的问题是您传递给 regex_search 的迭代器与为 smatch 定义的迭代器之间的类型不匹配。 std::smatch 定义为:

typedef match_results<string::const_iterator> smatch;

iterend的类型是

string::iterator

当您调用 regex_search 时迭代器版本定义为

template< class BidirIt, 
        class Alloc, class CharT, class Traits >  
bool regex_search( BidirIt first, BidirIt last,
                   std::match_results<BidirIt,Alloc>& m,
                   const std::basic_regex<CharT,Traits>& e,
                   std::regex_constants::match_flag_type flags = 
                       std::regex_constants::match_default );

正如我们所见,match_result 的迭代器和迭代器必须匹配。如果我们改变

auto iter = test.begin();
auto end = test.end();

auto iter = test.cbegin();
auto end = test.cend();

然后所有内容现在都具有 string::const_iterator 类型,并且可以编译

#include<regex>
#include<string>
#include <iostream>
using namespace std;
int main()
{
    smatch results;
    string temp("abc");
    string test("abc");

    regex r(temp);
    auto iter = test.cbegin();
    auto end = test.cend();

    if (regex_search(iter, end, results, r))
        cout << results.str() << endl;
    return 0;
}

Live Example

关于C++:为什么我不能将一对迭代器传递给 regex_search?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33307440/

相关文章:

c++ - 为什么我的循环只执行一次?

c++ - 过度包含库 C++

c++ - 构建错误 : none of the 12 overloads could convert all the argument types

c# - 应用程序仅在带有 visual studio 的 pc 上运行

c++ - 按位非运算哪个更快 : precalculated table or `~`

C++ 将 float 转换为无符号字符?

c++ - 从 winapi 套接字正确接收

c++ - 为什么不太可能/不太可能显示性能改进?

C++ std::function 返回意外值

c++ - "unable to initialize application 0xc000005"