iterator 功用與為什麼要使用
tags: C++ Concept
iterator指的是對結構的元件做存取,一般他看起來就像是指標一樣的功能,可實際上只是人對程式的操作行為看起來一樣而已,實際上程式對資料的操作行為是不一樣的。
還有一大誤區就是當使用vector操作時給的反饋是一樣的,儘管他們內部的資料操作行為不一樣。
記住vector是保證記憶體連續的,只要記憶體是連續的就可以直接使用資料指標操作取得正確結果
在這段程式碼裡面你可以得到相同的結果
/*****************************************************************
Name :
Date : 2017/03/18
By : CharlotteHonG
Final: 2017/03/18
*****************************************************************/
#include <iostream>
#include <vector>
#include <list>
using namespace std;
int main(int argc, char const *argv[]){
vector<int> a{3, 2, 1};
vector<int>::iterator it = a.begin();
for(int i = 0; i < 3; ++i) {
cout << *(it++) << ", ";
} cout << endl;
int* p = &(*a.begin());
for(int i = 0; i < 3; ++i) {
cout << *(p++) << ", ";
} cout << endl;
return 0;
}
/*==============================================================*/
但這並不代表他們是一樣的操作,在list的結構內並不保證資料的連續性,此時你並不能透過
由第一個頭地址++,推算第二筆資料位置
你根本不知道他們在記憶體的那些地方,透過 iterator 可以幫你獲取正確的位址
/*****************************************************************
Name :
Date : 2017/03/18
By : CharlotteHonG
Final: 2017/03/18
*****************************************************************/
#include <iostream>
#include <vector>
#include <list>
using namespace std;
int main(int argc, char const *argv[]){
list<int> a{3, 2, 1};
list<int>::iterator it = a.begin();
for(int i = 0; i < 3; ++i) {
cout << *(it++) << ", ";
} cout << endl;
int* p = &(*a.begin());
for(int i = 0; i < 3; ++i) {
cout << *(p++) << ", ";
} cout << endl;
return 0;
}
/*==============================================================*/
沒有留言:
張貼留言