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

时间:2016-10-25 02:06:39

标签: 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<<" ";

}

错误是:

[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])'

2 个答案:

答案 0 :(得分:6)

您忘记在<algorithm>生活的地方加入std::find标题。

您还应该包含<string>以访问std::string 你很可能从另一个标题中间接地包含<string>,不应该依赖它。

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

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

    std::vector<std::string> vec;
    vec.push_back("First");
    vec.push_back("second");
    

    您可以使用初始化列表:

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

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

    您可以使用insert方法:

    vec.insert(vec.end(), 4, "RepeatTimes");
    
  3. 考虑在详细信息时推断出类型名称,并且不会在代码中添加任何可读性值:

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

    for (auto it: vec){
        std::cout << it << " ";
    }
    

答案 1 :(得分:2)

添加:

#include <algorithm>

解决了我的问题