c++ - 如何知道环路提前被打破了?

标签 c++ c++11 c99 c++14

<分区>

for(int i=0; i<len_arr; i++)
    if(arr[i] == some_num){
        printf("The idx of %d is: %d\n", some_num, i);
        break;
    }
if(i == len_arr)
    printf("Number not found.\n");

这行不通。因为那个 i 不能在循环外访问。

我想到了两种方法来达到我想要的效果。

但我的问题是,有没有其他更优雅的方式来实现这种效果?

方式一:

int i;
for(i=0; i<len_arr; i++)
    if(arr[i] == some_num){
        printf("The idx of %d is: %d\n", some_num, i);
        break;
    }
if(i == len_arr)
    printf("Number not found.\n");

方式二:

for(int i=0; (i<len_arr) && (printf("Number not found.\n")); i++)
    if(arr[i] == some_num){
        printf("The idx of %d is: %d\n", some_num, i);
        break;
    }

最佳答案

如果您不能轻易表达这一点,请根本不要使用循环。在这个具体案例中,您可以使用专用功能进行搜索。

auto start = arr;
auto end = arr + len;
auto val = std::find(start,end,some_num);
if (val != end)
   printf("The idx of %d is: %d\n", some_num, std::distance(start,val));
else
   printf("Number not found.\n");

关于c++ - 如何知道环路提前被打破了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30724665/

相关文章:

c++ - devkitPPC (Wii) 开发的不同语言

c++ - C++中字符的指针

c++ - C++11 STL 中的所有内容都是用户可实现的吗?

c - const关键字的使用

c - Linux 中条件运算符的奇怪使用

c - C99 结构中的函数重载

c++ - 我应该通过迭代器还是通过访问运算符来迭代 vector ?

c++ - __func__ 未在预处理输出中替换

C++11 g++ 带有大括号括起来的初始化列表

c++ - 如何根据模板变量参数多次扩展语句