编译器错误:没有用于查找调用的匹配函数

Ann*_*y 1 c++ vector

我正在尝试使用向量,因为我刚刚开始学习但是却坚持这个错误.我试着看看cpp引用并写上它但仍然收到错误.

 #include<vector>
 #include<iostream>
 #include<cstring>
 using namespace std;
 int main()
{

vector<string> vec;

vec.push_back("First");

vec.push_back("second");

for( int i = 0; i < 4 ; i++ )
    vec.push_back("RepeatTimes");

vector<string>::iterator fp = find(vec.begin(), vec.end(), "First");


for( vector<string>::iterator it = vec.begin(); it != vec.end(); it++ )                  cout<<*it<<" ";

}
Run Code Online (Sandbox Code Playgroud)

错误是:

[Error] no matching function for call to 'find(std::vector<std::basic_string<char> >::iterator, std::vector<std::basic_string<char> >::iterator, const char [6])'
Run Code Online (Sandbox Code Playgroud)

Tre*_*key 7

你忘了<algorithm>std::find生活中包含标题.

您还应该包括<string>访问权限std::string.
您很可能<string>间接地包含在另一个标题中,不应该依赖它.


由于您正在学习,我将进一步建议您的代码的现代替代品.

  1. 而不是一次推回一个元素,

    std::vector<std::string> vec;
    vec.push_back("First");
    vec.push_back("second");
    
    Run Code Online (Sandbox Code Playgroud)

    你可以使用初始化列表:

    std::vector<std::string> vec {"First", "Second"};
    
    Run Code Online (Sandbox Code Playgroud)
  2. 而不是使用for循环来重复添加相同的元素,

    for( int i = 0; i < 4 ; i++ )
        vec.push_back("RepeatTimes");
    
    Run Code Online (Sandbox Code Playgroud)

    你可以使用insert方法:

    vec.insert(vec.end(), 4, "RepeatTimes");
    
    Run Code Online (Sandbox Code Playgroud)
  3. 当它们很详细并且不向代码添加任何可读性值时,请考虑推断类型名称:

    auto fp = std::find(vec.begin(), vec.end(), "First");
    
    Run Code Online (Sandbox Code Playgroud)
  4. for在迭代整个容器范围时使用基于范围的循环:

    for (auto it: vec){
        std::cout << it << " ";
    }
    
    Run Code Online (Sandbox Code Playgroud)