c++ - 迭代具有 n 和 n*n 元素的向量
问题描述
我有这个谷歌测试断言
ASSERT_FLOAT_EQ(longerVector[0], shorterVector[0]);
ASSERT_FLOAT_EQ(longerVector[1], shorterVector[1]);
ASSERT_FLOAT_EQ(longerVector[2], shorterVector[2]);
ASSERT_FLOAT_EQ(longerVector[3], shorterVector[0]);
ASSERT_FLOAT_EQ(longerVector[4], shorterVector[1]);
ASSERT_FLOAT_EQ(longerVector[5], shorterVector[2]);
ASSERT_FLOAT_EQ(longerVector[6], shorterVector[0]);
ASSERT_FLOAT_EQ(longerVector[7], shorterVector[1]);
ASSERT_FLOAT_EQ(longerVector[8], shorterVector[2]);
如您所见,有两个向量,较短的 n 元素和较长的 n*n 元素(在本例中分别为 3 和 9)。
我怎样才能创建两个嵌套的 for 循环,这将使我的代码更短更简单?
例如,我尝试过,但失败了。我明白为什么,但我无法想出更好的东西。
for(size_t i = 0; i < shorterVector.size(); i++)
{
for(size_t j = 0; j < shorterVector.size(); j++)
{
ASSERT_FLOAT_EQ(longerVector(i*j), shorterVector(j);
}
}
非常感谢您的任何帮助,对于一个愚蠢的问题,我深表歉意。
解决方案
for(size_t i = 0; i < shorterVector.size(); i++)
{
for(size_t j = 0; j < shorterVector.size(); j++)
{
ASSERT_FLOAT_EQ(longerVector[i*shorterVector.size() + j], shorterVector[j]);
}
}
你应该在那之前断言shorterVector.size() * shorterVector.size() == longerVector.size()
。
如果您不想在内部循环体中进行乘法运算,您可以执行以下操作:
for(size_t i = 0, k = 0; i < shorterVector.size(); i++)
{
for(size_t j = 0; j < shorterVector.size(); j++)
{
ASSERT_FLOAT_EQ(longerVector[k++], shorterVector[j]);
}
}
推荐阅读
- angular - ngFor多维json对象
- arduino - 将十六进制字符串颜色转换为 uint_16
- javascript - 缩小画布元素然后获取 imageData
- python - requests-html "RuntimeError: 在烧瓶端点上使用线程 'Thread-1' 时没有当前事件循环
- javascript - javascript如何在主题标签上进行正则表达式匹配和替换但排除主题标签字符
- vue.js - 使用 laravel-mix webpack 中的“extract”方法提取 Vue 时是否有 bug
- angular - 有没有办法通过将服务注入/导入到不是组件/服务/存储库的类中来提高代码质量?
- python - 为什么我得到“支持的目标类型是:('binary', 'multiclass')。改为'continuous'。” 错误?
- javascript - 组件渲染两次
- python - 无法在 Python 3.8 中使用超级用户创建的帐户登录