程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++學習:范圍for(range for)語句

C++學習:范圍for(range for)語句

編輯:C++入門知識

C++學習:范圍for(range for)語句


語法

范圍for(range for)語句遍歷給定序列中的每個元素並對序列中的每個值執行某種操作,其語法形式是:

    for (declaration : expression)
        statement

其中:
expression部分是一個對象,必須是一個序列,比方說用花括號括起來的初始值列表、數組或者vector或string等類型的對象。這些類型的共同特點是擁有能返回迭代器的begin和end成員
declaration 部分負責定義一個變量,該變量將被用於訪問序列中的基礎元素。每次迭代,declaration部分的變量會被初始化為expression部分的下一個元素值。確保類型相容最簡單的辦法是使用auto類型說明符

雖然我們通常稱new T [ ]分配的內存為“動態數組”,但是要記住我們所說的動態數組並不是數組類型,這是很重要的。當用new分配一個數組時,我們並未得到一個數組類型的對象,而是得到一個數組元素類型的指針。由於分配的內存並不是一個數組類型,因此不能對動態數組調用begin或end。出於相同的原因,也不能用范圍for語句來處理動態數組中的元素。

Example 1

使用范圍for語句和ispunct函數來統計string對象中標點符號的個數:

size_t cntPunct(string s) {
    decltype(s.size()) punct_cnt = 0; // punct_cnt 的類型和s.size()的返回類型一樣
    for (auto c : s)
        if (ispunct(s))
            ++punct_cnt;

    return punct_cnt;
}

Example 2

如果想要改變expression對象中的值,必須把循環變量定義成引用類型。使用這個引用,我們就可以改變它綁定的元素。

將字符串改寫為大寫字母:

void string_toupper(string &s) {
    for (auto &c : s)
        c = toupper(c);
}

Example 3

如果我們既想用引用,又不想改變原始值,那麼可以用const 引用。

打印字符串:

void string_print(string &s) {
    for (const auto &c : s)
        std::cout << c <<  ;
}
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved