用while循环替换for循环

时间:2019-06-15 22:16:24

标签: c++ loops

我有以下代码:

for (bool &flag : allFlags) {
    flag = true;
}

我得到了一个任务,将for循环替换为while循环。但是由于引用&flag,我不确定如何实现它。这是非常基本的,我有点ask愧。但是我不确定该怎么做。

2 个答案:

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