如何检测集合中的当前元素是否是最后一个元素?

时间:2013-12-06 05:58:35

标签: c++ foreach stdset

我有一个foreach循环遍历std::set看起来像

for (auto& line : lines){
    //use line
    bool end = /* Check if line is the last element */
}

使用std::vector我可以查看&line == &lines.back();

我有没有办法为std::set做一些类似的事情?

3 个答案:

答案 0 :(得分:2)

不,因为套装没有正面或背面。但是,您可以使用迭代器:

for (auto iter = lines.begin(); iter != lines.end(); iter++)
{
    bool end = iter + 1 == set.end();
}

或者,您可以计算您迭代的项目数:

size_t count = 0;
for (auto& line : lines)
{
    count++;
    if (count == set.size()) // this is the last element
}

答案 1 :(得分:0)

zneak有一些非常好的想法,但这里有一个涉及循环中的迭代器:

std::set<std::string> lines;
lines.insert("Hello");
lines.insert("Thar");
lines.insert("How");
lines.insert("Goes");
lines.insert("It");
for (const auto& line : lines) {
    auto it = lines.find(line);
    it++;
    std::cout << std::boolalpha << (it == lines.end()) << std::endl;
}

答案 2 :(得分:0)

这样怎么样,

auto iter = lines.cend();
if (iter!=lines.cbegin())
    --iter;
for (auto &line : lines)
{
    if (*iter==line) // end of the set
    {}
}