[英]break; C++: which loop is it actually breaking
關於C ++代碼的簡單問題:
for(int i=0;i<npts;i++)
{
for(int j=i;j<2*ndim;j++)
{
if(funcEvals[i]<bestListEval[j])
{
bestListEval[j] = funcEvals[i];
for(int k=0;k<m_ndim;k++)
bestList[j][k] = simplex[i][k];
break;
}
}
}
我想確保這一點
double **simplex
每一行最多插入一次double **bestList
break
實例break
了第二個(內部) for
循環。 是這樣的嗎?
C ++中的break語句將脫離直接放置break的for或switch語句。 它打破了最內層的結構(循環或開關)。 在這種情況下:
for(int i=0;i<npts;i++)
{
for(int j=i;j<2*ndim;j++)
{
if(funcEvals[i]<bestListEval[j])
{
bestListEval[j] = funcEvals[i];
for(int k=0;k<m_ndim;k++)
bestList[j][k] = simplex[i][k];
break;
}
}
// after the 'break' you will end up here
}
C ++中沒有辦法讓任何其他循環中斷目標。 為了打破父循環,您需要使用其他一些獨立的機制,如觸發結束條件。
此外,如果要退出多個內循環,可以將該循環提取到函數中。 在C ++ 11中,可以使用lambda來就地執行它 - 因此不需要使用goto 。
C ++中的break
語句將脫離直接放置break
的for
或switch
語句。 在這種情況下,它將突破for (int j = ...
loop。
C ++中沒有辦法讓任何其他循環break
目標。 為了打破父循環,您需要使用其他一些獨立的機制,如觸發結束條件。
// Causes the next iteration of the 'for (int i ...' loop to end the loop)
i = npts;
// Ends the 'for (int j ...' loop
break;
你正在打破你的第二個循環到你的第一個循環。
for (int i=0; i<npts; i++)
你可以在頂部設置一個布爾值
bool shouldBreak = false;
當你寫休息時,寫
shouldBreak = true;
break;
然后在循環結束時,每次檢查,
if (shouldBreak) break;
for (int i = 0; i < npts; i++)
你可以在頂部設置一個布爾值
bool shouldBreak = false;
當你想打破另一個循環時,寫下來
shouldBreak = true;
break;
break
break
將突破它當前所處的重復或迭代循環。 這個詳細的圖像指南旨在突出break
的行為,而不是說明良好的編碼實踐。 內部for循環已經足夠了,但就像我說的,這是出於視覺目的:
使用Modern C ++的<algorithm>
提供的各種搜索算法來搜索容器,並在某種程度上搜索字符串。 原因有兩方面:
這些代碼示例將需要相同的樣板 - 除了<algorithm>
之外的舊for循環搜索:
#include <vector>
#include <algorithm>
std::vector<int> int_container = { 10, 23, 10345, 432, 2356, 999, 1234, 0x45f };
bool has1234 = false;
現代的方式就是這樣,我們快速搜索容器, 如果搜索迭代器不在容器的最末端 ( 不是最后一個元素), 我們知道它正在搜索的值 。
該代碼實現了相同的結果,用戶編寫的代碼的線路更少,潛在的故障點更少,就像下面的舊代碼一樣。
auto search_position = std::find( int_container.begin(), int_container.end(), 1234 ) ;
if ( search_position != int_container.end() )
has1234 = true;
for ( auto i : int_container )
{
if ( i == 1234 )
{
has1234 = true;
break;
}
}
for ( int i = 0; i < int_container.size(); i++ )
{
if ( int_container[i] == 1234 )
{
has1234 = true;
break;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.