源码

首页 » 归档 » 源码 » c – “除了最后一个之外的每个”(或“每…

c – “除了最后一个之外的每个”(或“每…


参见英文答案 > Printing lists with commas C++????????????????????????????????????24个
>????????????How can I check if I’m on the last element when iterating using foreach syntax ????????????????????????????????????6个
每个人都会遇到这个问题:

for(const auto& item : items) {
    cout << item << separator;
}

…而且你得到了一个你不想要的额外分隔符.有时候它不是打印,而是执行一些其他动作,但是相同类型的连续动作需要一些分隔符动作 – 但最后一个动作不需要.

现在,如果你使用old-school 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结构吗?

为了进一步扩展这个问题(超出,比如说,this one),我会说我也不想明确地说明第一个或最后一个元素的特殊情况.这是一个“实施细节”,我不想被打扰.所以,在想象中的未来-C中,可能是这样的:

for(const auto& item : items) {
    cout << item;
} and_between {
    cout << separator;
}
(0)

本文由 投稿者 创作,文章地址:https://blog.isoyu.com/archives/c-chulezuihouyigezhiwaidemeigehuomei.html
采用知识共享署名4.0 国际许可协议进行许可。除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。最后编辑时间为:9月 26, 2019 at 02:02 上午

热评文章