我正在尝试使用向量,因为我刚刚开始学习,但却被困在这个错误上。我试着查看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])'
答案 0 :(得分:6)
您忘记在<algorithm>
生活的地方加入std::find
标题。
您还应该包含<string>
以访问std::string
你很可能从另一个标题中间接地包含<string>
,不应该依赖它。
由于您正在学习,我将进一步建议代码的现代替代方案。
而不是一次推回一个元素,
std::vector<std::string> vec;
vec.push_back("First");
vec.push_back("second");
您可以使用初始化列表:
std::vector<std::string> vec {"First", "Second"};
而不是使用for
循环重复添加相同的元素,
for( int i = 0; i < 4 ; i++ )
vec.push_back("RepeatTimes");
您可以使用insert方法:
vec.insert(vec.end(), 4, "RepeatTimes");
考虑在详细信息时推断出类型名称,并且不会在代码中添加任何可读性值:
auto fp = std::find(vec.begin(), vec.end(), "First");
在迭代整个容器范围时使用基于范围的for
循环:
for (auto it: vec){
std::cout << it << " ";
}
答案 1 :(得分:2)
添加:
#include <algorithm>
解决了我的问题