-
定长数组array
#include <iostream> #include <string> #include <array> using namespace std; class Student { public: Student() = default; Student(string name , int stuNum ) :name(name), stuNum(stuNum) {} void print() { cout << name << " " << stuNum << endl; } friend ostream& operator<<(ostream& out, Student& stu) { out << stu.name << " " << stu.stuNum; return out; } protected: string name; int stuNum; private: }; int main() { //创建定长数组 array<存储的类型,元素个数> arrname; array<int, 5> arr; array<string, 5>* pArr = new array<string, 5>; delete pArr; //常用成员函数 cout << arr.size() << endl; cout << arr.empty() << endl;//返回0表示不为空 arr.fill(3);//填充所有元素为3 //创建并初始化 //1.容器元素为普通类型数据 array<int, 5>arr1 = { 1,2,3,4,5 }; //遍历 //普通遍历 for (int i = 0; i < arr1.size(); i++) { cout << arr1[i] << " "; } cout << endl; //容器的遍历 for (int v : arr1) { cout << v << " "; } cout << endl; //交换 array<int, 5>arr2 = { 7,8,9,10,11 }; arr1.swap(arr2); for (int v : arr1) { cout << v << " "; } cout << endl; for (int v : arr2) { cout << v << " "; } cout << endl; //2.容器元素为自定义类型数据 array<Student, 3>stuArray; for (int i = 0; i < stuArray.size(); i++) { string name = "name"; stuArray[i] = Student(name + to_string(i), 18 + i); } for (Student v : stuArray) { //cout << v << endl; v.print(); } //迭代器 //对象模仿指针,*迭代器是取值运算 array<Student, 3>::iterator iter; //begin():第一个元素 //end(): 最后一个位置,不是最后元素的位置 stuArray.begin()->print(); (*stuArray.begin()).print(); //stuArray.end()->print(); //访问越界 (stuArray.end() - 1)->print();//最后一个元素 //迭代器遍历 for (iter = stuArray.begin(); iter != stuArray.end(); iter++) { //(*iter).print(); //iter->print(); cout << *iter << " "; } return 0; }
-
动态数组Vector
#include <iostream> #include <string> #include <vector> using namespace std; class Student { public: Student() = default; Student(string name,int stuNum):name(name),stuNum(stuNum){} void print() { cout << name << " " << stuNum << endl; } //ostream& operator<<(ostream& out) { // out << this->name << " " << this->stuNum << " "; // return out; //} friend ostream& operator<<(ostream& out,Student&stu) { out << stu.name << " " << stu.stuNum; return out; } protected: string name; int stuNum; private: }; template<class _type> void printVector(vector<_type> object) { for (_type v:object) { cout << v << " "; } cout << endl; } int main() { //1.容器中的元素为普通类型的数据 //不带长度的创建方式 vector<int>numVec1; for (int i=0;i<5;i++) { //只能用成员函数做插入元素 numVec1.push_back(i);//尾插法 } printVector(numVec1); //带长度创建 vector<string>stuList(3);//当前动态数组的长度是3 for (int i=0;i<3;i++)//只有在确定长度范围以内的可以直接采用数组法插入 { string name = "name"; stuList[i] = name + to_string(i); } printVector(stuList); //超过的必须用成员函数插入 stuList.push_back("张三"); printVector(stuList); //关于push_back vector<int>numVec2(5); numVec2.push_back(333);//在原来内存的后面扩增 printVector(numVec2);//0 0 0 0 0 333 //带初始化 vector<int> numVec3 = { 0,1,2,3,4,5 }; cout << numVec3.size() << endl;//当前容器中的元素个数 cout << numVec3.empty()<< endl;//判断是否为空 cout << numVec3.front()<< endl;//访问第一个元素 cout << numVec3.back()<< endl;//访问最后一个元素 cout << numVec3.at(2) << endl;//访问下标为2的元素 numVec3.emplace(numVec3.begin()+3, 10);//修改下标为3的元素为10 numVec3.emplace(numVec3.end() - 2, 55); numVec3.emplace_back(185); //和push_back一样的功能 printVector(numVec3); //批量复制 int array1[5] = { 1,5,3,78,8 }; vector<int>arrayCopy; arrayCopy.assign(array1+2, array1 + 5);//起始位置和结束位置 printVector(arrayCopy); //2.容器中的元素为自定义类型 vector<Student> stu; for (int i=0;i<3;i++) { string name = "name"; stu.push_back(Student(name + to_string(i), 18 + i)); } printVector(stu); //迭代器 vector<Student>::iterator iter; for (iter=stu.begin();iter!=stu.end();iter++) { cout << *iter << " "; } return 0; }
-
array与Vector嵌套
#include<iostream> #include <string> #include <vector> #include <array> using namespace std; int main() { //array与array嵌套 array<array<int, 4>, 3>arr;//三行四列二维数组 arr[3][4] for (int i = 0; i < 3; i++) { for (int j = 0; j < 4; j++) { arr[i][j] = i * j; } } for (int i = 0; i < arr.size(); i++) { for (int j = 0; j < arr[i].size(); j++) { cout << arr[i][j] << " "; } cout << endl; } cout << endl; //vector与vector嵌套 vector<vector<int>>vecData;//一般vecotor 采用的是push_back插入 for (int i=0;i<3;i++) { vector<int>temp; for (int j=0;j<4;j++) { temp.push_back(i * j); } vecData.push_back(temp); } for (int i=0;i<vecData.size();i++) { for (int j=0;j<vecData[i].size();j++) { cout << vecData[i][j]<<" "; } cout << endl; } cout << endl; //vector与array嵌套 array<vector<int>, 3>arrVec; vector<int>inVec[3] = { {3,8,7,8} ,{1,2,4,4,4,5,6} ,{7,8} }; for (int i=0;i<3;i++) { arrVec[i] = inVec[i]; } for (int i=0;i<arrVec.size();i++) { for (int j=0;j<arrVec[i].size();j++) { cout << arrVec[i][j] << " "; } cout << endl; } cout << endl; vector<array<int, 4>> vecArr; array<int, 4>inArr[3] = { {3,8,7,8} ,{1,2,4,4} ,{7,8,1,2} }; for (int i=0;i<3;i++) { vecArr.push_back(inArr[i]); } for (int i=0;i<vecArr.size();i++) { for (int j=0;j<vecArr[i].size();j++) { cout << vecArr[i][j] << " "; } cout << endl; } return 0; }
-
自定义array类
#include <iostream> #include <string> using namespace std; template<class _type,size_t size> class MyArray { public: MyArray() { Array = new _type[size]; } _type& operator[](int index){ return Array[index]; } _type* begin() { return Array; } _type* end() { return Array + size; } ~MyArray() { delete []Array; Array = nullptr; } //迭代器 类的对象模仿指针的行为 class iterator { public: iterator() = default; iterator(_type pMove):pMove(pMove) {} void operator=(_type*pMove) { this->pMove = pMove; } bool operator!=(_type* pMove) { return this->pMove != pMove; } iterator operator++(int) { this->pMove++; return *this; } _type operator*() { return pMove[0]; return *pMove; } protected: _type* pMove; private: }; protected: _type* Array; private: }; int main() { MyArray<int, 3>arr; for (int i=0;i<3;i++) { arr[i] = i; } MyArray<int, 3>::iterator iter; for (iter=arr.begin();iter!=arr.end();iter++) { cout << *iter <<" "; } return 0; }
13.C++STL容器(一)
最新推荐文章于 2024-05-28 21:13:10 发布