gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 12:00:19 25 4
gpt4 key购买 nike

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

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

重新考虑您的要求。

关于c++ - 使用一个 for 循环如何迭代和测试迭代器值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52719711/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com