如您所知,我们使用std :: find来查找元素。
但是假设我们有一个向量,我们想找到一个像#34; ^"在该向量的元素中。
那我们怎么能这样做呢?
例如,看看这段代码:
int main () {
vector<string> myvector;
myvector.push_back("a^b");
myvector.push_back("a");
myvector.push_back("cd^");
myvector.erase(find (myvector.begin(), myvector.end(), "^"));
for (unsigned i=0; i<myvector.size(); i++)
std::cout << ' ' << myvector.at(i) << "\t";
return 0;
}
如你所见,我只想找到并删除所有&#34; ^&#34;人物,但我不知道如何。
答案 0 :(得分:4)
由于您要删除每个字符串中的字符,vector::erase
不会帮助您 - 这只能让您删除完全"^"
的字符串。您必须迭代string
中的每个vector
,然后使用erase-remove idiom:
for (auto& str : myvector) {
str.erase(std::remove(str.begin(), str.end(), '^'), str.end());
}
如果你不能使用C ++ 11,你可以编写一个函数来进行擦除:
void erase_carets(std::string& str) {
str.erase(std::remove(str.begin(), str.end(), '^'), str.end());
}
std:for_each(myvector.begin(), myvector.end(), erase_carets);
答案 1 :(得分:0)
你必须使用带有c11功能的std算法
for (string& str : myvector){
str.erase(std::remove(str.begin(), str.end(), '^'),str .end());
}
它应该有用
答案 2 :(得分:0)
除了Barry的答案之外,如果你有提升作为替代方案,遍历你的矢量容器并使用boost::erase_all
下定义的boost/algorithm/string.hpp
for(auto& i : myvector)
boost::erase_all(i, "^");
答案 3 :(得分:-2)
$c = "" .ipToCountry($ip); echo $c;