【发布时间】:2012-11-09 19:12:32
【问题描述】:
我得到了这样一段代码:
template<class Iter>
void printRange(Iter begin, Iter last) {
for (Iter i = begin; i != last; i++) {
std::cout << *i << ", ";
}
outstd::cout << *last << ", ";
}
我的问题是:我怎样才能优雅地打印出最后一个元素?在循环之后单独计算最后一个元素似乎不是一个很好且正确的解决方案,......有更好的方法吗?请注意,我也不能使用
【问题讨论】:
-
通常,“last”迭代器确实指向 past 最后一个元素,因此您的代码可以正常工作并打印出每个元素。你确定
last也指向一个有效的元素吗? -
是的,实际上这不是我的代码,我只是尝试使用/修改它。如果是过去的最后一个,无论如何我都会称它为end。
-
@jalf,当你用“find”找到你的两个迭代器并且你想用它们打印它们之间的所有迭代器时,我遇到了同样的问题。
-
这是一个糟糕的功能,有两个原因。一,它的名字没有意义,因为它不打印容器,它打印范围。第二,它不遵循接受半开范围的公认和受人尊敬的传统。那么,你为什么要使用它呢?
-
因为这一系列函数使用数组,并且像
printRange(testArray, testArray + n-1)一样被调用。对不起,如果名字有误导性,我匆忙编辑了它。其次,这不是我的代码。 :)
标签: c++ iterator containers