c++ - 如何计算向量中矩阵的实例?
问题描述
我正在尝试使用以下方法计算矩阵实例:
// 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
和两个1
s。
解决方案
从 cppreference 页面上reserve()
:
将向量的容量增加到大于或等于 new_cap 的值。如果 new_cap 大于当前容量(),则分配新存储,否则该方法不执行任何操作。
Reserve() 不会改变向量的大小。
(强调我的)
所以你的counts_
向量实际上有大小 0,这意味着count_[i] = ...
是未定义的行为。
您可以使用std::vector
构造函数来设置初始大小,而不是调用 Reserve:
std::vector<int> counts_(s.size());
推荐阅读
- ios - 使用 deleteRows 后, becomeFirstResponer() 不会将焦点放在 textField
- postgresql-11 - 在插入触发器之前从内部数组元素更新列值
- datetime - Moment JS 在没有时间的情况下获取日期
- sql-server - 检查某些日期是否适合开始和结束日期范围以及匹配日期的总数
- jquery - 菜单项悬停动画所有其他项目不是第一个?
- c# - 如何按列表中的文件名混合排序
或数据表 - sql - 如何在 SQLite 中使用阿拉伯逗号选择 SQL
- mysql - 来自 2 个表的 Laravel Eloquent Where 条件
- javafx - JavaFX:如何在不关注主窗口的情况下关闭子窗口
- c# - Cascading Drop Drown - 带有“未知”但正确数量的项目的第二次下拉