c++使vector<string>容器中几个元素组成一个字符串,作为vector容器的第一个元素?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++使vector<string>容器中几个元素组成一个字符串,作为vector容器的第一个元素?相关的知识,希望对你有一定的参考价值。
首先push_back 几个字符串到vector,因为这几个字符串分别保存在vector中各个元素里面,我需要将这些字符串组成一个字符串存在vector的一个元素里面。怎么做?
void get_together(vector<string>& strs)assert(strs.size() >= 1);
for (size_t i=1; i<strs.size(); ++i)
strs[0] += strs[i];
strs.resize(1);
return strs;
参考技术A 遍历 加到第一个不就好了吗?!
在 C++ 中检查 std::vector<string> 是不是包含某个值 [重复]
【中文标题】在 C++ 中检查 std::vector<string> 是不是包含某个值 [重复]【英文标题】:In C++ check if std::vector<string> contains a certain value [duplicate]在 C++ 中检查 std::vector<string> 是否包含某个值 [重复] 【发布时间】:2011-09-10 18:46:42 【问题描述】:是否有任何内置函数告诉我我的向量是否包含某个元素 例如
std::vector<string> v;
v.push_back("abc");
v.push_back("xyz");
if (v.contains("abc")) // I am looking for one such feature, is there any
// such function or i need to loop through whole vector?
【问题讨论】:
***.com/questions/507884/… 从 C++11 开始,这个问题不再是重复的,因为std::any_of
现在为您提供了一种在容器包含匹配项时返回 true 的特定方法,而不是使用 std::find返回一个匹配的元素。感谢@colddie 对此的原始正确答案。
相关:***.com/a/31933118/8781554
【参考方案1】:
如果您的容器仅包含唯一值,请考虑改用 std::set
。它允许查询具有对数复杂度的集合成员。
std::set<std::string> s;
s.insert("abc");
s.insert("xyz");
if (s.find("abc") != s.end()) ...
如果您的向量保持排序,请使用std::binary_search
,它也提供对数复杂度。
如果所有其他方法都失败了,请退回到std::find
,这是一个简单的线性搜索。
【讨论】:
更好的是,如果您不需要对字符串进行排序,请使用std::tr1::unordered_set<std::string>
,可从<tr1/unordered_set>
或<unordered_set>
获得,它具有(几乎)恒定的查找和查询时间。使用 set 或 unordered_set,您也可以选择说 if (s.count("abc"))
。不要忘记接受其中一个答案。
所有这三个链接似乎都链接到现在存档的页面。【参考方案2】:
在 C++11 中,您可以改用 std::any_of
。
查找数组中是否有任何零的示例:
std::array<int,3> foo = 0,1,-1;
if ( std::any_of(foo.begin(), foo.end(), [](int i)return i==0;) )
std::cout << "zero found...";
【讨论】:
我发现 any_of 比 find 好得多,因为 find 返回一个向量迭代器到元素,而 any_of 返回一个布尔值,更适合 if 情况 你能补充一些细节吗?使用示例和文档链接。 @JamieBullock 你看过这个answer吗? @Xam 谢谢。我知道如何使用any_of
,我鼓励colddie改进答案【参考方案3】:
你可以使用std::find
如下:
if (std::find(v.begin(), v.end(), "abc") != v.end())
// Element in vector.
为了能够使用std::find
:include <algorithm>
。
【讨论】:
如果我要搜索的东西是argv
,它不是向量或数组(我试图查看某个命令行参数选项是否存在于通过argv
)?我创建了一个包含argv
的所有“元素”的向量并应用了您的解决方案,但我不确定它有多干净。
@jphollowed std::string const searchStr = "magic"; auto result = std::find_if(argv + 1, argv + argc, [&](char const * const arg) return arg == searchStr; );
有效。虽然没有那么干净和简洁。你至少需要 C++11 才能编译。【参考方案4】:
std::find()
.
【讨论】:
【参考方案5】:它在<algorithm>
中并称为std::find
。
【讨论】:
以上是关于c++使vector<string>容器中几个元素组成一个字符串,作为vector容器的第一个元素?的主要内容,如果未能解决你的问题,请参考以下文章
将 vector<vector<string>> 转换为 map<string, string> c++ 时奇怪的第一个元素
C++ 无法使用 vector<string> 作为返回类型
为字符串向量预分配内存(C++ vector<string>)
在 C++ 中检查 std::vector<string> 是不是包含某个值 [重复]