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

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

本文关键字:迭代 测试 迭代器 何迭代 循环 一个 for      更新时间:2023-10-16

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

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

实际输出:

JK
1 2 2 3 3
2

但是我需要这样的输出:

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

重新思考您的要求。