std:: vector 你会使用吗?
下面我们来看个简单的代码吧:
View Code
1 #include <iostream> 2 #include <vector> 3 4 using std::vector; 5 using std::cout; 6 using std::endl; 7 8 typedef vector<int> int_vector; 9 typedef vector<int>::iterator int_iterator; 10 11 int main() 12 { 13 int_vector vec1; 14 15 for (int i =1; i < 11; i++) 16 { 17 vec1.push_back(i); 18 } 19 20 //下面代码会有什么问题??? 21 for (int_iterator i = vec1.begin(), e = vec1.end() ; i != e; i++) 22 { 23 if (*i == 5) 24 { 25 vec1.erase(i);//erro:expression:vector iterator not dereferencable when run at i != e 26 } 27 cout << *i << " " ; 28 } 29 30 //下面代码会有什么问题??? 31 for (int_iterator i = vec1.begin(); i != vec1.end(); i++) 32 { 33 if (*i == 5) 34 { 35 vec1.erase(i); 36 } 37 cout << *i << " " ;//erro:expression:vector iterator not dereferencable when run at i != e 38 int j = 0; 39 } 40 41 //下面代码会有什么问题??? 42 for (int_iterator i = vec1.begin(); i != vec1.end(); i++) 43 { 44 if (*i == 5) 45 { 46 vec1.erase(i); 47 i--;//erro:expression:vector iterator not dereferencable when run at i != e 48 because i is for vector 10,not for vector 9,it need to update 49 } 50 cout << *i << " " ; 51 int j = 0; 52 } 53 54 //下面代码会有什么问题??? 55 for (int_iterator i = vec1.begin(); i != vec1.end(); i++) 56 { 57 if (*i == 5) 58 { 59 i = vec1.erase(i);//refresh i 60 } 61 cout << *i << " " ; 62 int j = 0; 63 } 64 65 //下面代码会有什么问题??? 66 for (int_iterator i = vec1.begin(); i != vec1.end(); i++) 67 { 68 if (*i == 5) 69 { 70 i = vec1.erase(vec1.end());//erro:expression:vector iterator not dereferencable when run at i =10, 71 //but the vector count is 9 72 } 73 cout << *i << " " ; 74 } 75 76 //下面代码会有什么问题??? 77 for (int_iterator i = vec1.begin(), e = vec1.end(); i != e; i++) 78 { 79 if (*i == 5) 80 { 81 i = vec1.erase(i);//erro:expression:vector iterator not dereferencable when run at i != e, 82 //but e is at 10 83 } 84 cout << *i << " " ; 85 } 86 87 //下面代码会有什么问题??? 88 for (int_iterator i = vec1.begin(), e = vec1.end(); i != e; i++) 89 { 90 if (*i == 5) 91 { 92 i = vec1.erase(i);//OK 93 e = vec1.end(); 94 } 95 cout << *i << " " ; 96 } 97 98 //下面代码会有什么问题??? 99 for (int_iterator i = vec1.begin(), e = vec1.end(); i != e; i++) 100 { 101 if (*i == 5) 102 { 103 i = vec1.erase(i, vec1.end()); //this is better. 104 e = vec1.end(); 105 if(i == vec1.end()) 106 { 107 break; 108 } 109 } 110 cout << *i << " " ; 111 } 112 113 cout << endl; 114 115 return 0; 116 }