首页 > 解决方案 > 迭代具有 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);
    }
}

非常感谢您的任何帮助,对于一个愚蠢的问题,我深表歉意。

标签: c++algorithmfor-loop

解决方案


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]);
    }
}

推荐阅读