多列表初始化的c ++最佳实践

时间:2013-11-13 03:26:41

标签: c++ vector

我有一个程序,我需要一个很多的向量。它们都以同样的方式启动。例如,以下是所有相同类型的2D矢量:

    vector<vector<uint> > OverallArrivalAlgorithm_Blocks;
    vector<vector<uint> > BusyArrivalAlgorithm_Blocks;
    vector<vector<uint> > firstBusyHourArrivalIndex;
    vector<vector<uint> > lastBusyHourArrivalIndex;
    vector<vector<uint> > numOverallArrivals;
    vector<vector<uint> > numBusyArrivals;

    jPoolLoop
    {
        vector<uint> PoolRowInt;
        OverallArrivalAlgorithm_Blocks.push_back(PoolRowInt);
        BusyArrivalAlgorithm_Blocks.push_back(PoolRowInt);
        firstBusyHourArrivalIndex.push_back(PoolRowInt);
        lastBusyHourArrivalIndex.push_back(PoolRowInt);
        numOverallArrivals.push_back(PoolRowInt);
        numBusyArrivals.push_back(PoolRowInt);

        kDatasetLoop
        {
            OverallArrivalAlgorithm_Blocks[j].push_back(0);
            BusyArrivalAlgorithm_Blocks[j].push_back(0);
            firstBusyHourArrivalIndex[j].push_back(0);
            lastBusyHourArrivalIndex[j].push_back(0);
            numOverallArrivals[j].push_back(0);
            numBusyArrivals[j].push_back(0);
        }
   }

如果它们属于不同类型,我会研究模板,但这不是问题。在另一个文件中,我需要大约40个不同的向量。更优雅地做这件事的最“c ++方式”是什么?在python中,我可能会使用字典,因此可以迭代所有列表。将所有这些放在载体中似乎很笨拙,因为那时我需要关心它们的位置等等。我在问,因为我觉得我的代码比它需要的时间长得多。

2 个答案:

答案 0 :(得分:0)

好的,所以用我的直觉将Python用于所有可以想象的东西,我把它转换为

    // J,K are constants known at runtime. Vector should be JXK
    map<string, vector<vector<uint> >> pData;
    string metrics[6] = {"OverallArrivalAlgorithm_Blocks","BusyArrivalAlgorithm_Blocks","firstBusyHourArrivalIndex","lastBusyHourArrivalIndex","numOverallArrivals","numBusyArrivals"};
    for (int s = 0; s < 6; s++)
        pData.insert(std::make_pair(metrics[s], vector<vector<uint> >(J,vector<uint>(K,0))));

答案 1 :(得分:0)

我建议您使用网站cppreference。在您的特定情况下,看起来std::vector的以下构造函数是您正在寻找的(在C ++ 11中略有不同):

explicit vector( size_type count,
                 const T& value = T(),
                 const Allocator& alloc = Allocator());

         vector( size_type count,
                 const T& value,
                 const Allocator& alloc = Allocator());

这允许您构建count提供的元素的value个副本。