我有一个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
做一些类似的事情?
答案 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
{}
}