gpt4 book ai didi

c++ - 在 vector> 的初始化中合并 vector 和 initializer_list?

转载 作者:可可西里 更新时间:2023-11-01 18:37:45 24 4
gpt4 key购买 nike

假设我正在初始化一个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] 的 vector .我想要 suffixv[i] 的初始化一起所以这是有道理的,如果我从 v 添加/删除元素,我不必移动索引的初始化。

最佳答案

一种可能的解决方案是使用辅助函数来执行附加操作。

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;
}

关于c++ - 在 vector<vector<T>> 的初始化中合并 vector 和 initializer_list?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24102522/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com