将矢量插入另一个矢量

时间:2014-10-09 13:01:28

标签: c++ vector

我可以这样做吗?

std::vector<std::vector<std::string>> vec;

vec.push_back(std::vector<std::string>("abc", "cde", "fgh", "ijk"));
vec.push_back(std::vector<std::string>("abc", "cde", "fgh", "ijk"));
vec.push_back(std::vector<std::string>("abc", "cde", "fgh", "ijk"));

我已经知道我想要哪些值,并且我试图像这样创建一个3 x 4矢量。

编辑:我更喜欢C ++ 03解决方案,因为我的编译器不支持C ++ 11。

4 个答案:

答案 0 :(得分:4)

您需要使用:

vec.push_back(std::vector<std::string>( { "abc", "cde", "fgh", "ijk" } ) ) ;
                                        ~~                          ~~
  

我已经知道哪些值

那为什么不呢? (C ++ 11)

std::vector<std::vector<std::string>> vec 
{
{ "abc", "cde", "fgh", "ijk" },
{ "abc", "cde", "fgh", "ijk" },
{ "abc", "cde", "fgh", "ijk" },
} ;

答案 1 :(得分:1)

对于重复的字符串向量,您可以使用另一个构造函数重载来获取计数和重复元素:

#include <iostream>
#include <string>
#include <vector>

int main ()
{

    std::vector<std::vector<std::string>> vec 
    (
        3, { "abc", "cde", "fgh", "ijk" }
    );

    for (v : vec) {
        for (s : v)
            std::cout << s << ",";
        std::cout << "\n";
    }
}

Live Example

答案 2 :(得分:0)

你可以有矢量矢量,但你错误地初始化它们。没有构造函数接受类型T的4个参数。但是,从c ++ 11开始,它们可以使它们成为初始化列表。

#include <iostream>
#include <vector>
#include <string>
using namespace std;

int main() {
    std::vector<std::vector<std::string>> vec;
    vec.push_back(std::vector<std::string>({"abc", "cde", "fgh", "ijk"}));
    vec.push_back(std::vector<std::string>({"abc", "cde", "fgh", "ijk"}));
    vec.push_back(std::vector<std::string>({"abc", "cde", "fgh", "ijk"}));
    return 0;
}

答案 3 :(得分:0)

另一个(即使是在C ++ 11之前):

int main() {
    std::vector<std::vector<std::string> > vec;
    std::string aa[] = {"abc", "cde", "fgh", "ijk"};
    std::vector<std::string> vec1(aa, aa+sizeof(aa)/sizeof(std::string));

    vec.push_back(vec1);
    vec.push_back(vec1);
    vec.push_back(vec1);
    return 0;
}