第6章 vector向量容器
/* 第三篇 C++STL容器技术 第6章 vector向量容器 6.1 vector技术原理 6.2 vector应用基础 6.3 本章小结 */ // 第6章 vector向量容器 // 6.1 vector技术原理 ------------------------------------------------------------------------------------------- // 6.2 vector应用基础 ------------------------------------------------------------------------------------------- // 95 #include <vector> #include <iostream> int main(void) { using namespace std; vector < int > v; v.push_back(20); v.push_back(26); v.push_back(39); for(size_t i = 0; i < v.size(); i++) cout << "v[" << i << "] = " << v[i] << endl; return 0; } //96 #include <vector> #include <iostream> int main(void) { using namespace std; vector < int > v; v.push_back(20); v.push_back(26); v.push_back(39); vector < int > ::iterator i, iend; iend = v.end(); int j; for(i = v.begin(), j = 0; i != iend; i++, j++) cout << "v[" << j << "] = " << *i << endl; return 0; } // 96 , insert #include <vector> #include <iostream> int main(void) { using namespace std; vector < int > v; v.push_back(6); v.push_back(7); v.push_back(8); v.push_back(10); v.insert(v.begin() + 3, 9); //在元素10的前面插入9 v.insert(v.begin(), 5); //插入5为首元素 v.insert(v.end(), 11); //插入11为末元素 for(size_t i = 0; i < v.size(); i++) cout << "v[" << i << "] = " << v[i] << endl; return 0; } // 97, erase #include <iostream> #include <vector> class MyAnimal { public: char *name; int age; public: MyAnimal(char *name, int age) { this->name = name; this->age = age; } ~MyAnimal(){} }; int main(void) { using namespace std; MyAnimal *pDog = new MyAnimal("dog", 1); MyAnimal *pMonkey = new MyAnimal("monkey", 2); MyAnimal *pChicken = new MyAnimal("chicken", 3); MyAnimal *pSnake = new MyAnimal("snake", 4); vector < MyAnimal * > v; //v将存放各对象的地址 v.push_back(pDog); v.push_back(pMonkey); v.push_back(pChicken); v.push_back(pSnake); delete pMonkey; //物理删除pMonkey所指的对象 v.erase(v.begin() + 1); //删除第2个元素,即抹去了vector的pMonkey地址 vector < MyAnimal * > ::iterator i, iend; iend = v.end(); for(i = v.begin(); i != iend; i++) cout << (*i)->name << ' ' << (*i)->age << endl; v.clear(); //清除所有vector元素 cout << "执行clear()" << endl << "vector元素已全部清除" << endl; return 0; } // 98, 反向遍历 #include <vector> #include <iostream> int main(void) { using namespace std; vector < int > v; v.push_back(1); v.push_back(3); v.push_back(5); v.push_back(7); v.push_back(9); vector < int > ::reverse_iterator ri, riend; // riend = v.rend(); for(ri = v.rbegin(); ri != riend; ri++) cout << *ri << endl; return 0; } // 99, swap #include <vector> #include <iostream> using namespace std; void print(vector < int > &v); int main(void) { //v1 vector < int > v1; v1.push_back(11); v1.push_back(12); v1.push_back(13); cout << "v1 = "; print(v1); //v2 vector < int > v2; v2.push_back(90); v2.push_back(92); cout << "v2 = "; print(v2); //v1与v2交换 v1.swap(v2); // v1和v2元素个数不必相等 cout << "v1与v2交换后" << endl; cout << "v1 = "; print(v1); cout << "v2 = "; print(v2); return 0; } void print(vector < int > &v) { for(size_t i = 0; i < v.size(); i++) cout << v[i] << " "; cout << endl; } // 100 #include <vector> #include <iostream> using namespace std; void print(vector < int > &v); int main(void) { using namespace std; vector < int > v; print(v); //添加5个元素 v.push_back(1); v.push_back(2); v.push_back(3); v.push_back(4); v.push_back(5); print(v); //再添加4个元素 v.push_back(6); v.push_back(7); v.push_back(8); v.push_back(9); print(v); //调整vector数据空间大小 v.reserve(30); print(v); return 0; } void print(vector < int > &v) { cout << "---------------------" << endl; cout << "empty = " << v.empty() << endl; cout << "size = " << v.size() << endl; cout << "max_size = " << v.max_size() << endl; cout << "capacity = " << v.capacity() << endl; } // 6.3 本章小结 -------------------------------------------------------------------------------------------