0

我有一个需要大量向量的程序。它们都以相同的方式初始化。例如,以下是所有相同类型的 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 中,我可能会使用字典,以便可以迭代所有列表。将所有这些放在一个向量中似乎很笨拙,因为那时我需要关心它们的位置等。我问是因为我觉得我的代码比它需要的长得多。

4

2 回答 2

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))));
于 2013-11-13T04:17:22.493 回答
0

我建议您使用站点cppreferencestd::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

于 2013-11-14T11:40:18.700 回答