C++:向量<通过<string>函数设置>初始化

C++: vector< set<string> > initialization by function

本文关键字:gt lt 函数 设置 初始化 通过 C++ 向量 string      更新时间:2023-10-16

在C++中,我想通过以下方式初始化字符串集的向量:

string border(getBorder());
vector<string> W(_h_,border+"_"+border);
vector< set<string> > W_f(_h_,getNgrams(&W[0]));

其中:

set<string> getNgrams(string word){ ... }

和:

string getBorder(){ ... }

错误消息显示:

conversion from 'std::basic_string<char, std::char_traits<char>, std::allocator<char> >*' to non-scalar type 'std::string' requested

W[0]产生std::string,因此&W[0]是指向字符串的指针,而您有getNgrams(std::string)而不是getNgrams(std::string*),因此编译器抱怨从std::string*std::string的转换

您正试图在此处将std::string*分配给std::string

vector< set<string> > W_f(_h_,getNgrams(&W[0]));

&W[0]std::string*,但getNgrams期望std::string

set<string> getNgrams(string word){ ... }

你的getNgrams函数需要一个string,但你在这里传递了一个string*

vector<string> W(_h_,border+"_"+border);
vector< set<string> > W_f(_h_,getNgrams(&W[0])); // look at the argument being passed.

wvector<string>,因此w[0]string,并且您正在传递&w[0],它是string*

在这一行:

vector< set<string> > W_f(_h_,getNgrams(&W[0]));

您可以使用&运算符获得W[0]的地址。W[0]的类型是std::string,地址的类型是std::string*(或者更具体地说,您在错误消息中看到的内容)。然后将该指针传递给函数getNgrams,该函数需要字符串而不是指针。

只需移除&操作符即可修复。不过,为了避免复制字符串,您可能希望使用const引用:

set<string> getNgrams(const string& word)