每个人都会在某个时候遇到这个问题:
for(const auto& item : items) {
cout << item << separator;
}
最后还有一个你不想要的分离器。有时它不打印,而是执行一些其他操作,但是同一类型的连续操作需要一些分隔符操作——但是最后一个不需要。
现在,如果使用老式的 for 循环和数组,就可以了
for(int i = 0; i < num_items; i++)
cout << items[i];
if (i < num_items - 1) { cout << separator; }
}
(或者您可以对循环外的最后一项进行特殊处理。)如果您有任何允许非破坏性迭代器的东西,即使您不知道它的大小,您也可以这样做:
for(auto it = items.cbegin(); it != items.cend(); it++) {
cout << *it;
if (std::next(it) != items.cend()) { cout << separator; }
}
我不喜欢最后两个的美学,喜欢循环的范围。我可以获得与最后两个相同的效果,但使用更漂亮的 C + + 11ish 构造?
for(const auto& item : items) {
cout << item;
} and_between {
cout << separator;
}