Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么我不能将cend()和cbegin()传递给count\u呢?_C++_Constants_Countif - Fatal编程技术网

C++ 为什么我不能将cend()和cbegin()传递给count\u呢?

C++ 为什么我不能将cend()和cbegin()传递给count\u呢?,c++,constants,countif,C++,Constants,Countif,我试图计算向量中长度大于6的字符串的数量。这很简单,但我正在尝试使用算法库中的count_if来完成。这是我的代码: int string_size_check(const std::vector<std::string> &v, unsigned int size){ return std::count_if(v.begin(), v.end(), [size] (std::string &s)->bool{ return s.size() >

我试图计算向量中长度大于6的字符串的数量。这很简单,但我正在尝试使用算法库中的count_if来完成。这是我的代码:

int string_size_check(const std::vector<std::string> &v, unsigned int size){
    return std::count_if(v.begin(), v.end(), [size] (std::string &s)->bool{ return s.size() > size; });
}

int main(){
    std::vector<std::string> v = { "abc", "abcd", "abcde", "abcdef", "abcdefg", "abcdefg" };
    std::cout << string_size_check(v, 6);
}

你是对的,因为你的向量是常量,你的迭代器也是常量

但因此,谓词函数的参数也必须是const


您需要:const std::string&s

因为向量是const,所以迭代器也是const

但因此,谓词函数的参数也必须是const


您需要:const std::string&s

错误消息是什么?错误消息是什么?我明白了。谢谢你的帮助。我花了很多时间检查代码。我希望错误信息能更多clear@emper无法将参数1从“const std::basic_string”转换为“std::string&”。它确实给std::string这个基本的字符串起了一个奇怪的名字,因为std::string是一个typedef。我指的是字面意思的英语refere@EmpereurAiman:第一个论点blahblahblah将失去常量限定符。编译器在这个主题上变化很大,对我来说,clang是目前最好的一个。看起来很棒,我想我会在visual studio IDE中使用clang。我明白了。谢谢你的帮助。我花了很多时间检查代码。我希望错误信息能更多clear@emper无法将参数1从“const std::basic_string”转换为“std::string&”。它确实给std::string这个基本的字符串起了一个奇怪的名字,因为std::string是一个typedef。我指的是字面意思的英语refere@EmpereurAiman:第一个论点blahblahblah将失去常量限定符。编译器在这个主题上变化很大,对我来说,clang是目前最好的一个。看起来很棒,我想我会在visual studio IDE中使用clang。
    c:\program files (x86)\microsoft visual studio 12.0\vc\include\algorithm(97): error C2664: 'bool string_size_check::<lambda_fed0cfd76fd966b8c62fe345d7e88af2>::operator ()(std::string &) const' : cannot convert argument 1 from 'const std::basic_string<char,std::char_traits<char>,std::allocator<char>>' to 'std::string &'
1>          Conversion loses qualifiers
1>          c:\program files (x86)\microsoft visual studio 12.0\vc\include\algorithm(109) : see reference to function template instantiation 'std::iterator_traits<const std::basic_string<char,std::char_traits<char>,std::allocator<char>> *>::difference_type std::_Count_if<const std::basic_string<char,std::char_traits<char>,std::allocator<char>>*,_Pr>(_InIt,_InIt,_Pr)' being compiled
1>          with
1>          [
1>              _Pr=string_size_check::<lambda_fed0cfd76fd966b8c62fe345d7e88af2>
1>  ,            _InIt=const std::basic_string<char,std::char_traits<char>,std::allocator<char>> *
1>          ]
1>          c:\users\enter\documents\visual studio 2013\projects\win32test\win32test\source.cpp(7) : see reference to function template instantiation '__w64 int std::count_if<std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<std::basic_string<char,std::char_traits<char>,std::allocator<char>>>>>,string_size_check::<lambda_fed0cfd76fd966b8c62fe345d7e88af2>>(_InIt,_InIt,_Pr)' being compiled
1>          with
1>          [
1>              _InIt=std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<std::basic_string<char,std::char_traits<char>,std::allocator<char>>>>>
1>  ,            _Pr=string_size_check::<lambda_fed0cfd76fd966b8c62fe345d7e88af2>
1>          ]