C++標準模板庫 迭代器 iterator 詳解(一)
- #include <vector>
- #include <iostream>
- #include <list>
- #include <algorithm>
- #include <iterator> //copy
- usingnamespace std;
- template <class T>
- inlinevoid print (const T& coll, constchar* optcstr="")
- {
-
typename
- std::cout << optcstr;
- for (pos=coll.begin(); pos!=coll.end(); ++pos)
- {
- std::cout << *pos << ' ';
- }
- std::cout << std::endl;
- }
- void test_random_access_iterator()
- {
- vector<int> coll;
-
// insert elements from 1991 to 2013
- for (int i=1991; i<=2013; ++i)
- {
- coll.push_back (i);
- }
- /* print number of elements by processing the distance between beginning and end
- * - NOTE: uses operator - for iterators
- */
-
cout << "number/distance: " << coll.end()-coll.begin() << endl;
- /* print all elements
- * - NOTE: uses operator < instead of operator !=
- */
- vector<int>::iterator pos;
- for (pos=coll.begin(); pos<coll.end(); ++pos)
- {
- cout << *pos << ' ';
- }
- cout << endl;
- /* print all elements
- * - NOTE: uses operator [] instead of operator *
- */
- for (int i=0; i<coll.size(); ++i)
- {
- //cout << coll.begin()[i] << ' '; 和如下語句效果相同
- cout << coll[i] << ' ';
- }
- cout << endl;
- /* print every second element
- * - NOTE: uses operator +=
- */
- for (pos = coll.begin(); pos < coll.end()-1; pos += 2)
- {
- cout << *pos << ' ';
- }
- cout << endl;
- }
- /********************************************
- 執行結果:
- number/distance: 23
- 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006
- 2007 2008 2009 2010 2011 2012 2013
- 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006
- 2007 2008 2009 2010 2011 2012 2013
- 1991 1993 1995 1997 1999 2001 2003 2005 2007 2009 2011
- *********************************************/
- void test_advance()
- {
- list<int> coll;
- // insert elements from 1 to 9
- for (int i=2007; i<=2014; ++i)
- {
- coll.push_back(i);
- }
- //列印整個連結串列
- print(coll,"print the list as follow:\n");
- list<int>::iterator pos = coll.begin();
- // print actual element
- cout<<endl;
- cout << *pos << endl;
- // step three elements forward
- cout<<endl<<"after advance (pos, 3)\n";
- advance (pos, 3);
- // print actual element
- cout << *pos << endl;
- // step one element backward
- cout<<endl<<"after advance (pos, -1)\n";
- advance (pos, -1);
- // print actual element
- cout << *pos << endl;
- }
- /********************************************
- 執行結果:
- print the list as follow:
- 2007 2008 2009 2010 2011 2012 2013 2014
- 2007
- after advance (pos, 3)
- 2010
- after advance (pos, -1)
- 2009
- *********************************************/
- void test_distance()
- {
- list<int> coll;
- // insert elements from -3 to 9
- for (int i=2007; i<=2014; ++i)
- {
- coll.push_back(i);
- }
- print(coll,"print the list as follow:\n");
- // search element with value 2010
- list<int>::iterator pos;
- pos = find (coll.begin(), coll.end(), // range
- 2010); // value
- if (pos != coll.end())
- {
- // process and print difference from the beginning
- cout << "difference between beginning and 2010: "
- << distance(coll.begin(),pos) << endl;
- }
- else
-
相關推薦
C++標準模板庫 迭代器 iterator 詳解(一)
[cpp] view plaincopyprint? #include <vector> #include <iostream> #include <list> #include <
C++標準模板庫---迭代器介紹(iterator、const_iterator)
迭代器 概念:C++的一種機制,用來遍歷標準模板庫容器中的元素,是一種"智慧"指標 一、迭代器的特點 迭代器是一種智慧指標,具有遍歷複雜資料結構的能力 不同的容器有不一樣的內部結構,因此會有一樣的迭代器型別 迭代器定義後,並不屬於某一例項容器物件,只要是屬於該迭代器
c++迭代器Iterator詳解
1 C++ Iterators(迭代器) 迭代器可被用來訪問一個容器類的所包函的全部元素,其行為像一個指標。 舉一個例子,你可用一個迭代器來實現對vector容器中所含元素的遍歷。有這麼幾種迭代器如下: 迭代器 描述 input_iterator 提供讀功能的向前移動迭
rust 迭代器 (iterator) 詳解
翻譯來源 這篇文章的目的是為一些常見的iterator提供參考資料。並不能替代Iterator API或者書中的Rust iterator核心概念 ,事實上這篇文章的內容來自以上兩種內容。 為了更好理解本篇文章內容,推薦讀者至少粗略瞭解Rust
Java迭代器(iterator詳解以及和for迴圈的區別)
前言: 迭代器是一種模式、詳細可見其設計模式,可以使得序列型別的資料結構的遍歷行為與被遍歷的物件分離,即我們無需關心該序列的底層結構是什麼樣子的。只要拿到這個物件,使用迭代器就可以遍歷這個物件的內部。Iterable:實現這個介面的集合物件支援迭代,是可以迭代的
設計模式之迭代器與組合模式(一)
很高興,這本書總共13章,這次已經是到第9章了;同時也很遺憾,小編脫離了書本,還是不知道如何描述一個設計模式。就比如迭代器與組合模式,原書篇幅比較長,小編儘量通俗易懂些,不到之處,還請各位小夥伴參考原書,小編也歡迎和大家一起交流。 有許多種方法可以把物件堆起來成為一個集合(collection)。你可以把它們
STM32編碼器模式詳解(一)---理論
編碼器介面模式 選擇編碼器介面模式的方法是:如果計數器只在TI2的邊沿計數,則置TIMx_SMCR暫存器中的SMS=001;如果只在TI1邊沿計數,則置SMS=010;如果計數器同時在TI1和TI2邊沿計數,則置SMS=011。 通過設定TIMx_CCER暫存
C++容器vector和迭代器iterator
vector是同一種物件的集合,每個物件都有一個對應的整數索引值。和string物件一樣,標準庫將負責管理與儲存元素相關的類存。引入標頭檔案#include<vector>1.vector物件的定義和初始化[cpp]vector<T> v1
C++ STL迭代器使用詳解
寫在前面,迭代器這種東西,就是為了使訪問簡單!! 容器::iterator iter; for(iter= 容器.begin();iter!=容器.end();iter++){ cout<<*iter或者是 iter->first等等之類的
Python中的迭代器iterator和yield生成器(constructor)
什麼叫迭代器和可迭代物件? 一、可迭代物件(Iterable) 可以直接作用於for迴圈的物件統稱為可迭代物件(Iterable)。 所有的Iterable均可以通過內建函式iter()來轉變為Iterator。 然後使用它的next()方法呼叫,直
c++迭代器詳解(一):back_inserter, front_inserter,inserter
1.stl迭代器之配接器( Iterator Adapters) 迭代器(Iterators)是一個純抽象的概念:任何東西,只要其行為類似迭代器,它就是一個迭代器.也就是說,只有具備有迭代器的四種基本操作:取值(*),遞增(++) 比較(== !=) 賦值(=)它就是迭代器
Iterator(迭代器)的一般用法 (轉)
迭代器(Iterator) 迭代器是一種設計模式,它是一個物件,它可以遍歷並選擇序列中的物件,而開發人員 不需要了解該序列的底層結構。迭代器通常被稱為“輕量級”物件,因為建立它的代價小。 Java中的Iterator功能比較簡單,並且只能單向移動: (1) 使用方法
迭代器與組合模式(轉載)
程式碼實在太多了,偷個懶轉載大佬的 https://www.cnblogs.com/lzhp/p/3427704.html 迭代器模式 提供了一種方法順序訪問一個聚合物件中的各個元素,而又不暴露內部的表示 把在元素之間遍歷的責任交給迭代器,而不是聚合物件 角色
什麼是迭代器,舉例詳解
2018年11月05日 20:30:11 HZY199321 閱讀數:5 個人分類: 個人成長
設計模式之迭代器與組合模式(二)
在上次的文章中,我們通過層層引導,已經知道了迭代器模式的由來。現在我們再好好總結下。 關於迭代器模式,你所需要知道的第一件事情,就是它依賴於一個名為迭代器的介面。這是一個可能的迭代器的介面: 現在,我們一旦有了這個介面,就可以為各種物件集合實現迭代器:陣列、列表、散列表...如果我麼想要為陣列實現迭代器,
設計模式之迭代器與組合模式(三)
現在我們已經能愉快地看著一頁一頁羅列出來的選單進行點菜了。現在又有的小夥伴希望能夠加上一份餐後甜點的“子選單”。怎麼辦呢?我們不僅僅要支援多個選單,甚至還要支援選單中的選單。 如果我們能讓甜點選單變成餐廳選單集合的一個元素,那該有多好。但是根據現在的實現,根本做不到呀。我們想要的是這樣的: 我們需要什麼
設計模式之迭代器與組合模式(四)
因為這系列篇幅較長,所以在這裡也不進行任何鋪墊,直奔主題去啦。 利用組合設計選單 我們要如何在選單上應用組合模式呢?一開始,我們需要建立一個元件介面來作為選單和選單項的共同介面,讓我們能夠用統一的做法來處理選單和選單項。換句話說,我們可以針對選單或選單項呼叫相同的方法。 讓我們從頭來看看如何讓選單能夠符合組合
C++ 模板詳解(一)
C++模板 模板是C++支援引數化多型的工具,使用模板可以使使用者為類或者函式宣告一種一般模式,使得類中的某些資料成員或者成員函式的引數、返回值取得任意型別。 模板是一種對型別進行引數化的工具; 通常有兩種形式:函式模板和類模板; 函式模板針對僅引
C++之模板詳解(一)
C++模板 模板是C++支援引數化多型的工具,使用模板可以使使用者為類或者函式宣告一種一般模式,使得類中的某些資料成員或者成員函式的引數、返回值取得任意型別。 模板是一種對型別進行引數化的工具; 通常有兩種形式:函式模板和類模板; 函式模板針對僅引數型別不同的函式; 類模板針對僅資料成
C++之類模板詳解(一)
C++ 除了支援函式模板,還支援類模板(Class Template)。函式模板中定義的型別引數可以用在函式宣告和函式定義中,類模板中定義的型別引數可以用在類宣告和類實現中。類模板的目的同樣是將資料的型別引數化。 宣告類模板的語法為: template<typenam