我可以这样做吗?
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。
答案 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";
}
}
答案 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;
}