所以,我试图做的是初始化一个包含常量值的向量数组。从本质上讲,就是这样:
const std::vector<std::string> MyConstant[] = { {"const1", "const2"}, {"const3", "const4", "const5"} };
我不确定我在这里做错了什么,因为我经常使用矢量。任何帮助将不胜感激。
答案 0 :(得分:0)
如果您使用2013年以下的Visual Studio版本来编译此代码,那么它不起作用,因为the compiler doesn't support initializer lists。
如果您使用最新版本的gcc或clang编译代码,它应该可以正常工作。
您可以使用BOOST在没有初始化列表的情况下执行此操作:
#include <vector>
#include <string>
#include <boost/assign/list_of.hpp>
using namespace boost::assign;
int main()
{
const std::vector<std::string> l = list_of("const1")("const2")("const3")("const4")("const5");
const std::vector< std::vector<std::string> > MyConstant = list_of(l);
for (size_t i=0; i<MyConstant.size(); i++)
{
for (size_t j=0; j<MyConstant[i].size(); j++)
{
std::cout<<MyConstant[i][j]<<std::endl;
}
std::cout<<"----"<<endl;
}
return 0;
}
输出here
你甚至可以进一步压缩它:
#include <vector>
#include <string>
#include <boost/assign/list_of.hpp>
using namespace boost::assign;
int main()
{
typedef std::vector<std::string> strvec;
const std::vector<strvec> MyConstant =
list_of (strvec()=(list_of("1")("2")("3")("4")("5")))
(strvec()=(list_of("a")("b")("c")("d")("e")));
for (size_t i=0; i<MyConstant.size(); i++)
{
for (size_t j=0; j<MyConstant[i].size(); j++)
{
std::cout<<MyConstant[i][j]<<std::endl;
}
std::cout<<"----"<<endl;
}
return 0;
}
输出here
答案 1 :(得分:0)
生成一个静态函数来初始化常量变量,例如:
std::vector<std::vector<std::string>> GenerateMyConstant() {
std::vector<std::vector<std::string>> constants;
{
std::vector<std::string> element;
element.push_back("const1");
element.push_back("const2");
constants.push_back(element);
}
{
std::vector<std::string> element;
element.push_back("const3");
element.push_back("const4");
element.push_back("const5");
constants.push_back(element);
}
return std::move(constants);
}
然后,你可以初始化你的常数:
const std::vector<std::vector<std::string>> MyConstant(GenerateMyConstant());