初始化常量矢量数组

时间:2014-07-01 01:16:57

标签: c++ arrays vector constants

所以,我试图做的是初始化一个包含常量值的向量数组。从本质上讲,就是这样:

const std::vector<std::string> MyConstant[] = { {"const1", "const2"}, {"const3", "const4", "const5"} };

我不确定我在这里做错了什么,因为我经常使用矢量。任何帮助将不胜感激。

2 个答案:

答案 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());