假设我正在初始化vector<vector<string>>
,如此:
vector<vector<string>> v;
v = {{
{"a", "b", "c"},
{"aa", "bb"},
{"xyz", "yzx", "zxy"},
{}
}};
现在假设我想将已存在的vector<string>
附加到某些v
的元素中。像这样:
vector<string> suffix {{"1", "2", "3"}};
vector<vector<string>> v;
v = {{
{"a", "b", "c"} + suffix,
{"aa", "bb"},
{"xyz", "yzx", "zxy"} + suffix,
{}
}};
这种语法显然不起作用,因为operator+
没有以这种方式定义。
我理解第一种方式构建v
然后编写
vector<int> indices = {0, 2};
for(int i: indices)
v[i].insert(v[i].end(), suffix.begin(), suffix.end());
但这不方便,因为我可能有几个suffix
向量附加到任意v[i]
。我希望suffix
与v[i]
的初始化一起使用,所以它是有道理的,如果我在v
的初始化中添加/删除元素,我不必转移索引。
答案 0 :(得分:4)
一种可能的解决方案是使用辅助函数来执行追加。
vector<string> appendStrings(vector<string>&& s1, vector<string> const& s2)
{
s1.insert(s1.end(), s2.begin(), s2.end());
return s1;
}
并用它来初始化变量。
vector<string> suffix {{"1", "2", "3"}};
vector<vector<string>> v = {{
appendStrings({"a", "b", "c"}, suffix),
{"aa", "bb"},
appendStrings({"xyz", "yzx", "zxy"}, suffix),
{}
}};
<强>更新强>
更有效地实施appendStrings
(感谢@Yakk):
vector<string> appendStrings(initializer_list<char const*>&& s1,
vector<string> const& s2)
{
vector<string> ret.
ret.reserve(s1.size() + s2.size());
for (auto item : s1 ) {
ret.emplace_back(item);
}
ret.insert(ret.end(), s2.begin(), s2.end() );
return ret;
}