从 for(int &i : i) 获取当前迭代器

get current iterator from for(int &i : i)

本文关键字:获取 迭代器 int for      更新时间:2023-10-16

这是我的循环;

for (sf::TcpSocket &client : clients)
{
    ...
}

在循环中,我想检查是否有人断开连接,如果是的,请将其从用户列表中删除,我只是不知道如何检查列表中的哪个用户。p>用户列表是100 sf :: tcpsockets的向量在循环中,如果有人断开连接,我只是跳过了剩下的代码,然后使用继续语句。

我检查他们是否通过发送" ping"而断开连接,如果没有给出任何响应,则它们断开了连接。

有一个用户列表,被命名为客户

基于循环的范围不应该用于修改容器本身。如果您想从容器中添加或删除元素,则应使用循环的标准:

for (auto it = std::begin(clients); it != std::end(clients);)
{
    sf::TcpSocket& client = *it;
    // accept data from the client socket
    if (acceptStatus == sf::Socket::Disconnected)
    {
        it = clients.erase(it);
        erased = true;
    }
    else
    {
        ++it;
    }
}

请注意,迭代器不会作为for循环邮政条件的一部分增加。如果我们这样做,当删除元素时,迭代器将被递增,这不是您想要的,因为您会意外跳过元素。