for里面嵌套IF的效率有关问题

for里面嵌套IF的效率问题求助
现有一个vector<cstring> vecStr
我有两套规则A和B,需要对里面的元素做处理...

以下两种代码,哪种更好一些?

C/C++ code

vector<cstring> vecA;
vector<cstring> vecB;
for(vecStr) // 遍历vector
{
    if(...)// 需要做A规则
    {
        //使用规则A做处理
        vecA.push_back();
    }

    if(...)// 需要做B规则
    {
        //使用规则B做处理
        vecB.push_back();
    }
}



或者是:
C/C++ code

vector<cstring> vecA;
if()// 需要做A规则
{
    for(vecStr) // 遍历vector
    {
       //使用规则A做处理
       vecA.push_back();
    }
}

vector<cstring> vecB;
if()// 需要做B规则
{
    for(vecStr) // 遍历vector
    {
        //使用规则A做处理
        vecB.push_back();
    }
}



直觉上,觉得这两种在执行效率上应该是有区别的...
求解答...

------解决方案--------------------
第二种,缓存命中率高

第一种,逻辑更清楚

两种情况,某些条件下效率大约是2倍差距
------解决方案--------------------
楼主自己实测下最清楚。
对绝大部分应用,几乎没有有意义的性能差距。
------解决方案--------------------
效率差别不是很大!
主要多做的部分是在 if()里头。
如果if里面有很多复杂的操作就可能会很慢。
如果if里头很简单,其实效率相差很微小!

你可以用一个计时器来具体测试的。

另外,那个 if() //A规则
是否是对所有的元素一样的?
如果不是一样的,则后面那个算法就错了
------解决方案--------------------
当然是第二种,
------解决方案--------------------
在敝人看来,两种方案实现的不是同一个东西~

如果楼主认为是同一个东西的话,那两者的效率是一样,if判断条件来源不明,不容易判断
------解决方案--------------------
回家之前来回答你的问题,呵呵
从执行效率来说肯定是第二种效率要高,像第一种每次循环都要判断如果有1千万次循环就要判断一千万次,而第二种只要判断一次就可以了
代码风格来说第一种好一点。
------解决方案--------------------
我推荐第一种,

第一种只需要一次遍历,第二种要两次遍历。

------解决方案--------------------
效率差不多的吧
------解决方案--------------------
我记得好像林锐博士那本《高质量C++\C编程指南》中有对这种情况的描述,和6楼说的一样。
------解决方案--------------------
第二种效率要高。 表面看起来似乎做了两次遍历,实际上两次遍历之后的次数 却只是把所有数据过了一遍

从汇编执行行数来看 第二种要比第一种少很多条汇编指令

如果对付那些消耗巨大的消息处理,比如判断一条消息是否发送所有连接当前服务器的客户端

应该是先判断消息合法性,再进行发送,而不是不顾三七二十一直接就发送然后每次发送再判断

这样每次判断效率会低很多
for (;;)
{
if()
{
}
}

这个消息判断合法就发送 不合法直接不用发送
if ()
{
for(;;)
{
}
}

明显会比第一种要快很多,所有消耗都是从小累积起来的
除非是一些可能导致系统崩溃之类的安全判定,为代码安全添加判定,这些消耗必须得有
否则一些逻辑上可以减少的消耗尽量减少。 如果怕代码不清楚 直接写上几行注释就可以了
------解决方案--------------------
第二种的规则很难找,有时候第一种的可读性会好一些,如果不是你的平台对指令执行时间有要求第一种是比较好的选择吧。如果是无聊自己玩,都试试吧。性能应该第二个好