如果在For循环中带有{}且没有{}的语句

时间:2013-03-11 12:46:26

标签: c++ loops if-statement for-loop

我在向量中有一个队列循环,我需要在队列循环中搜索以找到最小索引队列以及最大大小队列。

我正在使用以下代码

int min_index = 0;
int max_size = -1;
std::size_t size = q.size();
for( i=0; i<size; i++){ //accessing loop of queues
    if(q[min_index].size() > q[i].size())
        min_index = i; // Now q[min_index] is min_index is the minimum size queue
    if(q[i].size() > max_size)
        max_size = q[i].size(); // maximum size queue
} 

我很怀疑是否对每个{}使用if statement,如下面的代码

int min_index = 0;
    int max_size = -1;
    std::size_t size = q.size();
    for( i=0; i<size; i++){ //accessing loop of queues
        if(q[min_index].size() > q[i].size()){
            min_index = i; // Now q[min_index] is the shortest queue
              }
        if(q[i].size() > max_size){
            max_size = q[i].size(); // longest queue        
            } 
}

哪一个是正确的,有没有{}会有什么区别。对不起,如果这是一个愚蠢的问题。我是编程新手。

5 个答案:

答案 0 :(得分:4)

在您的情况下,两个代码之间存在无差异

if(SOMETHING)
   DO_SOMETHING;

相同
if(SOMETHING) {
   DO_SOMETHING;
}

但是

 if(SOMETHING)
   DO_SOMETHING_1;
   DO_SOMETHING_2;   //DO_SOMETHING_2 will be performed whether the `if` condition
                     //is satisfied or not 

相同
 if(SOMETHING) {
   DO_SOMETHING_1;
   DO_SOMETHING_2;   //DO_SOMETHING_2 will be performed only if the `if` condition
 }                   //is satisfied, since it is inside the curly parentheses

在您的情况下,由于if块只包含一个语句,因此不需要卷曲括号(虽然,如果它让您感到困惑,建议使用它们来澄清事情 )..

答案 1 :(得分:3)

通常,最适用的规则是:

  

如有任何疑问,请使用{}

()

也是如此

但在你的情况下,两者都是等价的。

答案 2 :(得分:1)

它们会运行相同的但是如果你需要返回并且在if语句后面有多行代码而不需要添加{},那么有些人更喜欢使用{}。 / p>

答案 3 :(得分:0)

以这种方式使用的括号称为块语句,用于封装一个或多个语句。一个这样的块等于一个语句,它满足了将一个语句作为if语句的主体的解析器。

所以不,两者之间确实没有区别。在一个中,你有一个单独的语句,在另一个单一语句中,恰好包含其他语句。

答案 4 :(得分:0)

没有区别:

int min_index = 0;
int max_size = -1;
std::size_t size = q.size();
for( i=0; i<size; i++){ //accessing loop of queues
    if(q[min_index].size() > q[i].size())
        min_index = i; // Now q[min_index] is min_index is the minimum size queue
    if(q[i].size() > max_size)
        max_size = q[i].size(); // maximum size queue
}

唯一的区别是,如果你想在if中编写多行,例如

if(q[min_index].size() > q[i].size())
        min_index = i;
        ++i;

在这种情况下,如果min_index = i;为真,则只会调用if(q[min_index].size() > q[i].size())行。