使用一个 for 循环如何迭代和测试迭代器值?

Using one for loop how to iterate and test the iterator values?

这里我只需要使用一个 for 循环(内部没有 if 条件)来使用 google 测试来测试迭代器值,下面是我的代码

TEST(EVTValSortedVector, StdIterator)
{
    int arr[3], i;
    int data = 4;
    arr[0] = int(2);
    arr[1] = int(1);
    arr[2] = int(3);

    EVTValSortedVector<int> eTerriers;

    EXPECT_EQ(eTerriers.isEmpty(), true);

    for (i = 0; i < 3; i++)
    {
        eTerriers.insert(arr[i]);
    }
    EXPECT_EQ(eTerriers.isEmpty(), false);

    EVTValSortedVector<int>::iterator j = eTerriers.begin();
    EVTValSortedVector<int>::iterator k = eTerriers.begin();

    ++k;
    for (int i = 0; i < data - 1; i++, j++, ++k)
    {
        EXPECT_LE((*j), (*k));
        cout << "j and k value" << *j << *k << endl;
    }
}

Actual output:

j k
1 2
2 3
3 2

But i need output like this:

j k
1 1
1 2
1 3
2 2
2 3
3 3

如果我得到所需的输出(以上),那么只有我的测试用例会通过。

请帮我解决这个问题,我的要求是只使用一个for循环,而且循环内没有条件检查(没有if条件)。

请帮忙。

不应该在一个1循环中执行此操作。

for (auto i = eTerriers.begin(); i != eTerriers.end(); ++i)
{
    for (auto j = i; j != eTerriers.end(); ++j)
    {
        EXPECT_LE((*i), (*j));
        std::cout << "i and j value " << *i << *j << std::endl;
    }
}

1:我将 <algorithm> 中任何至少是线性的迭代器参数作为循环用于计算循环

如果你的循环计数不那么严格,你可以

#include <algorithm>

for (auto i = eTerriers.begin(); i != eTerriers.end(); ++i)
{
    std::for_each(i, eTerriers.end(), [i](auto & val)
    {
        EXPECT_LE((*i), (val));
        std::cout << "i and j value " << *i << val << std::endl;
    });
}

有一种方法,但它在循环中涉及 if,而且很糟糕。

constexpr std::size_t data = 3;

for (std::size_t i = 0; i < (data * data); ++i)
{
    if ((i % data) <= (i / data))
    {
        EVTValSortedVector<int>::iterator j = eTerriers.begin() + (i % data);
        EVTValSortedVector<int>::iterator k = eTerriers.begin() + (i / data);
        EXPECT_LE((*j), (*k));
        cout << "j and k value" << *j << *k << endl;
    }
}

重新考虑您的要求。