首页 > 解决方案 > 如何计算向量中矩阵的实例?

问题描述

我正在尝试使用以下方法计算矩阵实例:

    // setup some matrices to count instances of
    std::vector<std::vector<int>> matrix1({{1, 2, 3},
                                           {4, 5, 6}});

    std::vector<std::vector<int>> matrix2({{1, 2, 3},
                                           {4, 5, 6}});

    std::vector<std::vector<int>> matrix3({{7, 8, 9},
                                           {10, 11, 12}});

    std::vector<std::vector<int>> matrix4({{13, 14, 15},
                                           {16, 17, 18}});

    // collect matrices into a vector
    std::vector<std::vector<std::vector<int>>> vector_of_matrices({matrix1, matrix2, matrix3, matrix4});
    assert(4 == vector_of_matrices.size());

    // convert into a set, so that we know how many unique elements there are
    std::set<std::vector<std::vector<int>>> s(vector_of_matrices.begin(), vector_of_matrices.end());
    assert(3 == s.size());

    // store the counts, index wise
    std::vector<int> counts_;
    counts_.reserve(s.size());

    // handle to set iterator
    auto setIt = s.begin();

    // iterate over number of unique elements in vector_of_matrices
    for (int i=0; i < s.size(); i++){
        // count instances of current set setIt
        counts_[i] = std::count(vector_of_matrices.begin(), vector_of_matrices.end(), *setIt);
        // increment set
        std::advance(setIt, 1);
    }

此代码在调用std::count. 有没有人建议让这个代码工作?预期的输出将是std::vector<int>包含 3 个元素的 a2和两个1s。

标签: c++vectorcount

解决方案


从 cppreference 页面上reserve()

将向量的容量增加到大于或等于 new_cap 的值。如果 new_cap 大于当前容量(),则分配新存储,否则该方法不执行任何操作。

Reserve() 不会改变向量的大小。

(强调我的)

所以你的counts_向量实际上有大小 0,这意味着count_[i] = ...是未定义的行为。

您可以使用std::vector构造函数来设置初始大小,而不是调用 Reserve:

std::vector<int> counts_(s.size());

推荐阅读