我有一个 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
?
不,因为一组没有正面或背面。但是,如果您使用迭代器,则可以:
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
}
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;
}
这样怎么样,
auto iter = lines.cend();
if (iter!=lines.cbegin())
--iter;
for (auto &line : lines)
{
if (*iter==line) // end of the set
{}
}