一種類似指標的東東,和指標一樣存的是記憶體位置,使用方法和指標也差不多,通常使用vector時會跟著iterator一起使用,而非pointer
函式庫
基本上可以使用iterator的資料結構,該資料型態的函式庫就有iterator
ex.
#include <vector> #include <deque> #include <set>
宣告
資料結構<type>::iterator i; auto i = v.begin(); // 一定要賦值
#include <iostream> #include <vector> using namespace std; int main(){ vector<int> v = {4,8,7,6,3}; vector<int>::iterator i; // random access iterator // 或 auto i = v.begin(); for(i = v.begin(); i != v.end(); i++){ cout << *i << ' '; } cout << v.end() - v.begin(); // 5,即v.size() //輸出:4 8 7 6 3 cout << endl << *(i - 1); //3 cout << endl << *(i - 2); //6 cout << endl << *(i - 3); //7 return 0; }
#include <iostream> #include <deque> using namespace std; int main(){ deque<int> dq = {4,8,7,6,3}; deque<int>::iterator i = dq.begin(); // random access iterator // auto i = dq.begin(); cout << *i << '\n'; // 4 cout << *(i + 1) << '\n'; // 8 i++; cout << *(i + 2) << '\n'; // 6 return 0; }
#include <iostream> #include <set> using namespace std; int main(){ set<int> s; for(int j = 0; j < 5; j++){ s.insert(j); } set<int>::iterator i; //bidirectional iterator // auto i = s.begin(); for(i = s.begin(); i != s.end(); i++){ cout << *i << ' '; // 0 1 2 3 4 } set<int>::iterator i2 = s.begin(); cout << *i2 << '\n'; // 0 //i2 += 2(會爆掉) i2++; cout << *i2 << '\n'; // 1 return 0; }
vector<int> a = {4, 8, 7, 6, 3}; sort(a.begin(), a.end()); // {3, 4, 6, 7, 8} vector<int> b = {4, 8, 7, 6, 3}; sort(b.begin() + 2, b.end()); // {4, 8, 3, 6, 7} vector<int> c = {4, 8, 7, 6, 3}; sort(c.begin() + 1, c.end() - 2); // {4, 7, 8, 6, 3} vector<int> d = {4, 8, 7, 6, 3}; sort(d.begin() + 1, d.begin() + 3); // {4, 7, 8, 6, 3}