我需要为vector<vector<string>>
中的每个vector<string>
创建一个vector
,我需要在new vector<string>("a","A","á");
内部设置几个字符。
但我不想push_back
每个角色。有没有办法像我那样做?
答案 0 :(得分:3)
<强> C ++ 11 强>
std::vector
有一个insert
成员函数,可以接受 C ++ 11 中的std::initializer_list
,以及一个也接受std::initializer_list
的构造函数1}}。
考虑到这一点,我们可以轻松地编写插入多个元素的代码而无需单独的push_backs,也不必手动构造插入函数可以迭代的临时容器。
// construct `multi_vec` and initialize it with one std::vector<std::string>,
// having the elements "hello", "stackoverflow", and "world"
std::vector<std::vector<std::string>> multi_vec {
{ "hello", "stackoverflow", "world" }
};
// resize, to add another (empty) std::vector<std::string> to `multi_vec`
multi_vec.resize (2);
// insert some elements to `multi_vec[1]`
multi_vec[1].insert (multi_vec[1].end (), { "foo", "bar", "baz", "caz" });
multi_vec[0] -> { "hello", "stackoverflow", "world" }
multi_vec[1] -> { "foo", "bar", "baz", "caz" }
注意: insert
的相关std::vector
成员函数的第一个参数接受一个迭代器,指定后面的元素应该插入新元素,传递our_vec.end ()
会将我们的元素附加到列表的末尾。
<强> C ++ 03 强>
如果一个人不写 C ++ 11 而是使用 C ++ 03 ,那么事情必须以更丑陋的方式完成,下面是一个简单的例子,其结果与上一节中的例子相同。
char const * init_array_1[] = { "hello", "stackoverflow", "world" };
char const * init_array_2[] = { "foo", "bar", "baz", "caz" };
std::vector<std::vector<std::string> > multi_vec;
multi_vec.push_back (std::vector<std::string> (init_array_1, init_array_1 + 3));
multi_vec.push_back (std::vector<std::string> (init_array_2, init_array_2 + 4));
答案 1 :(得分:2)
在c ++ 11中,你可以这样做:
vector<vector<string>> v{
{"A", "á", "á"},
// more vectors...
};
答案 2 :(得分:1)
vector<vector<string>> v;
v.push_back(vector<string> { "A", "á", "à" });