C++ 如何在vs2008中的std::set中的元素上循环/将条件添加到std::for_的std::set中的每个元素上?

C++ 如何在vs2008中的std::set中的元素上循环/将条件添加到std::for_的std::set中的每个元素上?,c++,boost,stl,stdset,C++,Boost,Stl,Stdset,从这里开始: std::设置参与者; .... 参与者\插入(参与者); .... 无效交付(持续聊天信息和消息、聊天参与者、ptr参与者) { 最近的推送(msg); while(最近的\u msgs\uu.size()>max\u最近的\u msgs) 最近的流行歌曲; //我想对集合的所有成员调用deliver方法,除了传递给此函数的参与者,如何执行? std::for_each(参与者_u.begin()、参与者_u.end(), boost::bind(&chat_参与者::deli

从这里开始:

std::设置参与者;
....
参与者\插入(参与者);
....
无效交付(持续聊天信息和消息、聊天参与者、ptr参与者)
{
最近的推送(msg);
while(最近的\u msgs\uu.size()>max\u最近的\u msgs)
最近的流行歌曲;
//我想对集合的所有成员调用deliver方法,除了传递给此函数的参与者,如何执行?
std::for_each(参与者_u.begin()、参与者_u.end(),
boost::bind(&chat_参与者::deliver,_1,boost::ref(msg));
}

我想对set的所有成员调用deliver方法,除了传递给此函数的参与者,如何在vs2008中执行此操作?

实际上,最清楚的事情可能就是直接为循环编写一个

for (auto &p : participants_)
    if (p != participant)
    {
        //do your stuff
    }
for (auto &p : participants_) {
    if (p != participant)
        p->deliver();
}
或C++03等效程序:

for (std::set<chat_participant_ptr>::iterator i = participants_.begin();
     i != participants_.end(); ++i)
{
    if ((*i) != participant)
        (*i)->deliver();
}
for(std::set::iterator i=participants_uz.begin();
i!=参与者u.end();++i)
{
如果((*i)!=参与者)
(*i)->deliver();
}
我不认为使用
for_each
在这里为您带来任何通用性或表达性,主要是因为您没有编写任何可能需要重复使用的内容



如果你确实发现自己想要定期做类似的事情,你可以为每个人编写一个通用的
。真的是这样吗?

真的,最清楚的事情可能就是直接为
循环编写一个

for (auto &p : participants_) {
    if (p != participant)
        p->deliver();
}
或C++03等效程序:

for (std::set<chat_participant_ptr>::iterator i = participants_.begin();
     i != participants_.end(); ++i)
{
    if ((*i) != participant)
        (*i)->deliver();
}
for(std::set::iterator i=participants_uz.begin();
i!=参与者u.end();++i)
{
如果((*i)!=参与者)
(*i)->deliver();
}
我不认为使用
for_each
在这里为您带来任何通用性或表达性,主要是因为您没有编写任何可能需要重复使用的内容



如果你确实发现自己想要定期做类似的事情,你可以为每个人编写一个通用的
。真的是这样吗?

使用迭代器的简单for循环应该可以做到这一点

std::set<chat_participant_ptr>::iterator iter;
for(iter = participants_.begin();iter != participants_.end();++iter)
{
    if(participant != iter)
    {
        call deliver function on *iter 
    }
}
std::set::iterator iter;
对于(iter=参与者u.begin();iter!=参与者u.end();++iter)
{
如果(参与者!=国际热核实验堆)
{
iter上的调用传递函数
}
}

使用迭代器的简单for循环应该可以做到这一点

std::set<chat_participant_ptr>::iterator iter;
for(iter = participants_.begin();iter != participants_.end();++iter)
{
    if(participant != iter)
    {
        call deliver function on *iter 
    }
}
std::set::iterator iter;
对于(iter=参与者u.begin();iter!=参与者u.end();++iter)
{
如果(参与者!=国际热核实验堆)
{
iter上的调用传递函数
}
}

我在自动编译中找不到类型说明符。您是用C++11编译的吗?如果没有(如果您无法启用它),这只是一种为迭代集合的
循环编写常规
的简洁方法。就像我说的,要么开始使用C++11,要么在集合上编写常规循环。你想让我来说明一下吗?我在自动编译中找不到类型说明符。你是用C++11编译的吗?如果没有(如果您无法启用它),这只是一种为迭代集合的
循环编写常规
的简洁方法。就像我说的,要么开始使用C++11,要么在集合上编写常规循环。你想让我举例说明吗?