break這個詞都不陌生,最常用到的就是在switch語句中。
如果在switch的case后面忘寫了break,就會順序執行到下一個case的對應的語句。
我說的這種情況只是對于C++,對于C Sharp如果忘記了break,編譯器是會報錯的。
仔細想想,好像自己還真沒有用過break在其他地方。導致自己又掉入了一個大坑中。
比如使用一個for循環查找數組中所要的元素中your_find對應的索引:
~~~
int index = 0;
for(int i=; i<1000; i++)
{
if(array[i] == your_find)
{
index = i;
}
}
~~~
這樣呢,上訴的代碼會把整個for循環都執行完成。
為了,提高效率,如果我們可以確定array數組中只有一個與your_find對應的索引,就可以這樣修改代碼:
~~~
int index = 0;
for(int i=; i<1000; i++)
{
if(array[i] == your_find)
{
index = i;
break;
}
}
~~~
好了,當if中語句為真的時候,跳出for循環。
下面延伸一下,那么對于二重循環,執行break的話,是跳出哪一個循環呢?
最簡單的方法,寫一段代碼測試:
~~~
for(int j=0;j<=20;j++)
{
for(int i=0;i<=10;i++)
{
if(i==5) break;
}
if(j==20) cout<<" 'break' break from the nearest loop"<<endl;
}
cout<<j<<endl;
cout<<i<<endl;
~~~
上面代碼的輸出為:
break’ break from the nearest loop”
21
5
因此可以確定,break是跳出離他最近的一層循環。
- 前言
- deprecated關鍵字
- 指針(內存泄露)
- 頭文件相互包含(Compiler error C2653: not a class or namespace name)
- 獲取一張圖片的width和height
- This function or variable may be unsafe.
- 智能指針陷阱
- string中的c_str()陷阱
- wstring與string的轉換
- windows下chrome瀏覽器插件不能安裝
- 重定義關鍵字
- 正確釋放vector的內存
- 獲取設備環境HDC
- 抽象類不能實例化對象(但是你明明定義的不是抽象類)
- 重載賦值運算符的自我賦值
- 程序中的變量未初始化
- 成對使用new和delete時要采取相同的形式
- 意想不到的除數為零
- map的初始化(插入數據)
- 正則表達式截取字符串
- 捕獲窗口之外的鼠標消息(鉤子還是??)
- 類中的靜態成員變量(static or const static)
- 有if就要有else(一定成對)
- map查找結果處理
- 使用using namespace std的壞習慣
- new一個指針數組、以及創建動態二維數組
- 使用太多的全局變量
- 沒有及時break出for循環
- vector使用erase后迭代器變成野指針
- C++函數的默認參數(重新定義默認參數)
- 0xC0000005: 讀取位置 xxx時發生訪問沖突
- std::string初始化、最快速判斷字符串為空
- 你開發的軟件安裝在C盤Program Files (x86)下產生的異常