【发布时间】:2015-03-16 22:52:14
【问题描述】:
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<string> vs;
vs.push_back("i");
vs.push_back("like");
vs.push_back("apples");
vs.push_back("but");
vs.push_back("am");
vs.push_back("allergic");
vs.push_back("to");
vs.push_back("apples");
string sbut("but");
string s = find(vs.begin(), vs.end(), sbut);
s = find(vs.begin(), vs.end(), "but");
return 1;
}
这是我的测试代码。 我有一个场景,我将字符串存储在向量中,并且必须检查该向量中是否存在字符串。
我收到以下错误消息但我无法理解,两种情况的 find 返回不同类型的错误:
stringfind.cpp:20:47: error: conversion from ‘__gnu_cxx::__normal_iterator<std::basic_string<char>*, std::vector<std::basic_string<char> > >’ to non-scalar type ‘std::string {aka std::basic_string<char>}’ requested
string s = find(vs.begin(), vs.end(), sbut);
stringfind.cpp:21:7: error: no match for ‘operator=’ (operand types are ‘std::string {aka std::basic_string<char>}’ and ‘__gnu_cxx::__normal_iterator<std::basic_string<char>*, std::vector<std::basic_string<char> > >’)
s = find(vs.begin(), vs.end(), "but");
使用 -std=c++11 选项编译
谁能告诉我发生了什么以及如何实现这个场景?
编辑:对不起,我的意思是我使用
进行检查if(vs.end()!=find(vs.begin(),vs.end(), "but")
写测试程序太快了
【问题讨论】:
-
您是否阅读过
std::find的文档? -
std::find从什么时候开始返回字符串?无论如何,您为什么要再次将结果存储在字符串中?你已经有了它:它是sbut。 -1 甚至没有假装做任何研究。
标签: c++ string c++11 vector stl