我得到了一段这样的代码:

template<class Iter>
void printRange(Iter begin, Iter last) {
    for (Iter i = begin; i != last; i++) {
        std::cout << *i << ", ";
    }
     outstd::cout << *last << ", ";
}

我的问题是:我如何也可以优雅地打印出最后一个元素?循环后单独对最后一个元素进行处理似乎不是一个不错且正确的解决方案,...有更好的方法吗?请注意,我也不能使用

最佳答案

您可以有条件地输出分隔符:

template<class Iter>
void printContainer(Iter first, Iter last) {
    for (Iter i = first, end = ++last; i != end; i++) {
        std::cout << (i == first ? "" : ", ") << *i;
    }
}

对于更标准的[begin, end)半开范围:
template<class Iter>
void printContainer(Iter begin, Iter end) {
    for (Iter i = begin; i != end; i++) {
        std::cout << (i == begin ? "" : ", ") << *i;
    }
}

关于c++ - 使用给定的第一个和最后一个迭代器在范围内进行迭代,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13494891/

10-16 13:49