簡體   English   中英

迭代具有 n 和 n*n 元素的向量

[英]Iterate over vectors with n and n*n elements

我有這個谷歌測試斷言

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

改用這個

for(size_t i = 0; i < longerVector.size(); i++)
{
        ASSERT_FLOAT_EQ(longerVector[i], shorterVector[i%3]);  
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM