回覆列表
  • 1 # fxioadwre

    今天寫程式碼遇到這個坑 來強答一下auto用冒號進行遍歷的時候 應該是按值傳遞 複製了一份map的一個Key-Value 這時無法對map內的數值進行操作更改 而用auto iter = map.begin()時 等於迭代器使用 這時可以更改容器以下為參考程式碼int main(){ std::map<int, int> Data; Data.insert(make_pair(1, 1)); for (auto iter:Data) { iter.second = 5;//這裡不會修改map的值 } for (auto iter = Data.begin(); iter != Data.end(); iter++) { iter->second = 5;//這裡map內的值會變成5 }////更新 其實也可以傳引用進去修改for (auto &iter:Data){iter.second = 5;//這裡map內的值會變成5} system("pause"); return 0;}

  • 2 # 我是阿嘛

    你需要理解什麼是陣列Array,什麼是集合IConnection,什麼是IList開始.

    舉個簡單例子:

    陣列如 string ar=new string[]{"a","b","c"}

    這是一個簡單字串陣列。

    假設我需要提取陣列中的每一個元素,我該怎麼辦呢?

    所以那些天才們就想出一種方案,用C#語法表達是:

    forech(string item in ar)

    {

    MessageBox.Show(item);

    }

    然後你可以把forech(string item in ar)這種語法理解為迭代器.

    專業解釋:

    1.迭代器是可以返回相同型別值的有序序列的一段程式碼;

    2.迭代器可用作方法、運算子或get訪問器的程式碼體;

    3.迭代器程式碼使用yield return語句依次返回每個元素,yield break將終止迭代;

    4.可以在類中實現多個迭代器,每個迭代器都必須像任何類成員一樣有惟一的名稱,並且可以在foreach語句中被客戶端程式碼呼叫;

    5.迭代器的返回型別必須為IEnumerable和IEnumerator中的任意一種;

    6.迭代器是產生值的有序序列的一個語句塊,不同於有一個 或多個yield語句存在的常規語句塊;

    7.迭代器不是一種成員,它只是實現函式成員的方式,理解這一點是很重要的,一個透過迭代器實現的成員,可以被其他可能或不可能透過迭代器實現的成員覆蓋和過載;

    8.迭代器塊在C#語法中不是獨特的元素,它們在幾個方面受到限制,並且主要作用在函式成員宣告的語義上,它們在語法上只是語句塊而已;

  • 中秋節和大豐收的關聯?
  • 鎖邊機鎖邊線跳針怎麼處理?