簡體   English   中英

C ++:最優雅的方法來終止迭代字符串向量的循環?

[英]C++: Most elegant way to terminate a loop that iterates over a vector of strings?

假設我創建了一個大小尚未表示且其元素為字符串的向量。 我想使用for循環和cin將字符串輸入到此向量中。 然后,當用戶輸入完字符串后,我希望for循環終止。

我知道有兩種方法可以做到這一點。 可以使用Windows上的Ctrl + Z或Unix上的Ctrl + D終止輸入流。 我也可以使用帶有break的if語句,以便在輸入某個字符串(如"end" ,循環終止。

我的實施將是后兩者:

vector<string> words;

for(string temp; cin >> temp;)
{
    if(temp == "end")
    {break;}

    else
    {words.push_back(temp);}
}

因此,對於輸入foo bar ,循環不會終止,但是對於輸入foo bar end ,循環終止(對於foo end bar ,循環將終止,使得向量僅包含字符串"foo" )。

上面的實現是最好的方法嗎? 使用Ctrl + Z或Ctrl + D會更有效,因為這樣可以避免在每次迭代中都經過if語句嗎?

如果我們改為有一個元素為int類型的向量,那么這將是不同的,因為用戶可以輸入任何非整數的東西以終止循環。 但是在字符串的情況下,用戶輸入的任何內容都可以被視為字符串。

我正在閱讀Bjarn Stroustrup的第4章,“編程 - 使用C ++的原理和實踐”。

我更喜歡循環標頭以反映預期的退出條件,因此如果您想要讀取直到用戶進入end ,我寧願在循環條件下進行該測試:

for (std::string temp; std::cin >> temp && temp != "end"; )
    words.push_back(temp);

就“效率”而言,在這種情況下,它幾乎肯定是無關緊要的。 專注於使代碼簡單易讀。 僅在需要測量顯示時進行優化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM