1

我有一个 foreach 循环,std::set它看起来像

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

std::vector可以检查&line == &lines.back();

有没有办法我可以为 a 做类似的事情std::set

4

3 回答 3

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
}
于 2013-12-06T06:01:45.977 回答
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;
}
于 2013-12-06T06:08:19.707 回答
0

这样怎么样,

auto iter = lines.cend();
if (iter!=lines.cbegin())
    --iter;
for (auto &line : lines)
{
    if (*iter==line) // end of the set
    {}
}
于 2013-12-06T06:57:54.507 回答