我有以下代码:
for (bool &flag : allFlags) {
flag = true;
}
我得到了一个任务,将for
循环替换为while
循环。但是由于引用&flag
,我不确定如何实现它。这是非常基本的,我有点ask愧。但是我不确定该怎么做。
答案 0 :(得分:2)
您可以像这样简单地进行操作,但是这种替换很愚蠢:
{
auto ptr=allFlags.begin();
auto end=allFlags.end();
while( ptr!=end ) { *ptr=true; ++ptr; }
}
答案 1 :(得分:1)
迭代器可用于对«raw»数组进行操作(尤其是对其进行迭代)。
如@DimChtz所述,要获得开始迭代器和结束迭代器,必须分别使用std::begin()
和std::end()
函数。
下面介绍了两种替代方法。
std::fill()
(推荐)请考虑使用std::fill()
函数,因为它确实可以满足要求。
这是一个示例程序:
#include <algorithm>
#include <cstdlib>
#include <iostream>
#include <iterator>
int main()
{
bool allFlags[] = { true, false, true, false };
auto begin = std::begin(allFlags);
auto end = std::end(allFlags);
// Updating the element values.
std::fill(begin, end, true);
// Printing the element values.
std::copy(begin, end, std::ostream_iterator<bool>(std::cout, " "));
return EXIT_SUCCESS;
}
while
循环(根据原始请求,不使用std::fill()
)这是一个示例程序:
#include <cstdlib>
#include <iostream>
#include <iterator>
int main()
{
bool allFlags[] = { true, false, true, false };
auto begin = std::begin(allFlags);
auto end = std::end(allFlags);
// The loop to update the element values.
auto it = begin;
while (it != end) {
auto& element = *it;
// Updating the element value.
element = true;
++it;
}
// Printing the element values.
std::copy(begin, end, std::ostream_iterator<bool>(std::cout, " "));
return EXIT_SUCCESS;
}