《C++面向对象程序设计》课程笔记 lessen8 程序示例
1 程序示例:vector #include #include using namespace std; template void PrintVector(T s,T e) { for(;s!=e;++s) cout << *s << " "; cout << endl; } int main() { int a[5] = {1,2,3,4,5}; vector cout << "1) " << v.end() - v.begin() << endl; //两个随机迭代器可以相减,输出 1) 5 cout << "2) "; PrintVector(v.begin(),v.end()); //2) 1 2 3 4 5 v.insert(v.begin()+2,13); //在v.begin()+2 (v[2])位置插入13 cout << "3) "; PrintVector(v.begin(),v.end()); //3) 1 2 13 3 4 5 v.erase(v.begin()+2); //删除位于 v.begin()+2 (v[2])的元素 cout << "4) "; PrintVector(v.begin(),v.end()); //4) 1 2 3 4 5 vector v2.insert(v2.begin(),v.begin()+1,v.begin()+3); //将 v 的一段插入 v2 开头 cout << "5) v2: "; PrintVector(v2.begin(),v2.end()); //5) v2: 2 3 100 100 100 100 v.erase(v.begin()+1,v.begin()+3); //删除 v 上的一个区间,即 2 ,3 cout << "6) "; PrintVector(v.begin(),v.end()); //6) 1 4 5 system("pause"); return 0; } 2 用 vector 实现二维数组 #include #include using namespace std; int main() { vector //v 有3个元素,每个元素都是 vector for(int i=0;i for(int j=0;j<4;j++) v[i].push_back(j); for(int i=0;i { for(int j=0;j cout << v[i][j] << " "; cout << endl; } system("pause"); return 0; } 3 deque 所有使用于 vector 的操作都使用于 deque。 deque 还有 push_front (将元素插入到前面)和 pop_front (删除最前面的元素)操作,复杂度是 O(1)。? 4 list 容器 在任何位置插入删除都是常数时间,不支持随机存取。? 除了具有所有顺序容器都有的成员函数之外,还支持8个成员函数: push_front:在前面插入 pop_front:删除前面的元素 sort:排序(list 不支持 STL 的算法 sort) remove:删除和指定值相等的所有元素 unique:删除所有和前一个元素相同的元素(要做到元素不重复,则 unique 之前还需要 sort) merge:合并两个链表,并清空被合并的那个 reverse:颠倒链表 splice:在指定位置前面插入另一个链表中的一个或多个元素,并在另一链表中删除被插入的元素。? #include #include #include using namespace std; class A { private: int n; public: A(int n_) { n = n_; } friend bool operator <(const A & a1,const A & a2); friend bool operator ==(const A & a1,const A & a2); friend ostream & operator <<(ostream & o,const A & a ); }; bool operator< (const A & a1,const A & a2) { return a1.n < a2.n; } bool operator ==(const A & a1,const A & a2) { return a1.n == a2.n; } ostream & operator <<(ostream & o,const A & a ) { o << a.n; return o; } template void PrintList(const list { typename list i = lst.begin(); for(i=lst.begin();i!=lst.end();i++) cout << *i << ","; cout << endl; }//typename 用来说明 list int main() { list lst1,lst2; lst1.push_back(1); lst1.push_back(2); lst1.push_back(3); lst1.push_back(4); lst1.push_back(2); lst2.push_back(10); lst2.push_front(20); lst2.push_back(30); lst2.push_back(30); lst2.push_back(30); lst2.push_front(40); lst2.push_back(40); cout << "1) "; PrintList(lst1); //1) 1, cout << "2) "; PrintList(lst2); //2) 40,20,10,30,40, lst2.sort(); cout << "3) "; PrintList(lst2);//3) 10, lst2.pop_front(); cout << "4) "; PrintList(lst2); //4) 20, lst1.remove(2);//删除所有和A(2)相等的元素 cout << "5) "; PrintList(lst1); //5) 1, lst2.unique(); //删除所有和前一个元素相等的元素 cout << "6) "; PrintList(lst2); //6) 20, lst1.merge(lst2); //合并 lst2 到 lst1 并清空 lst2 cout << "7) "; PrintList(lst1);//7) 1, cout << "8) "; PrintList(lst2); //8) lst1.reverse(); cout << "9) "; PrintList(lst1);//9) 40,1, lst2.push_back(100); lst2.push_back(200); lst2.push_back(300); lst2.push_back(400); list::iterator p1,p2,p3; p1 = find(lst1.begin(),lst1.end(),3); p2 = find(lst2.begin(),lst2.end(),200); p3 = find(lst2.begin(),400); lst1.splice(p1,lst2,p3); //将 [p2,p3) 插入 p1 之前,并从 lst2 中删除 [p2,p3) cout << "10) "; PrintList(lst1); //10) 40,200,300, cout << "11) "; PrintList(lst2);//11) 100,400, system("pause"); return 0; } ?5 函数对象 若一个类重载了运算符 “()” ,则该类的对象就成为函数对象。? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |