如何在不推送的情况下创建vector <string>或类似的?</string>

时间:2014-03-28 13:08:16

标签: c++ list vector

我需要为vector<vector<string>>中的每个vector<string>创建一个vector,我需要在new vector<string>("a","A","á");内部设置几个字符。

但我不想push_back每个角色。有没有办法像我那样做?

3 个答案:

答案 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", "á", "à" });