IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> C++STL容器篇 -> 正文阅读

[系统运维]C++STL容器篇

目录

定长数组

动态数组

vector与array的嵌套


定长数组

  • array
    #include<iostream>
    #include<array>
    #include<string>
    using namespace std;
    template<class _Ty,size_t size>
    class MyArray {
    public:	
    	_Ty* begin() {
    		return Memory + 0;
    	}
    		  _Ty* end() {
    			  return Memory + size;
    		  }
    		  	 
    		  
    	MyArray() { Memory = new _Ty[size]; }
    	_Ty& operator[](int index) { return Memory[index]; }
    	~MyArray() { delete[]Memory; }
    	class iterator {
    	public: 
    		void operator=(_Ty* pmove) { this->pmove = pmove; }
    	bool operator!=(_Ty* pmove) { return this->pmove !=pmove; }
    	
    	 iterator operator++(int) { this->pmove++; return (*this); }
    	 _Ty operator*() { return *pmove; }
    iterator(_Ty* pmove=nullptr):pmove(pmove) {}
    	protected:
    		_Ty* pmove;
    	};
    	
    protected:
    	_Ty* Memory;
    };
    void TestMyArray() {
    	
    	MyArray<int, 3>::iterator iter;
    	MyArray<int, 3>array1D;
    	for (int i = 0; i < 3; i++)
    		array1D[i] = i;
    	for (iter = array1D.begin(); iter != array1D.end(); iter++)
    		cout << *iter << " ";
    }
    void Testarray() {
    	//存储类型int
    	//数组长度3
    	//类模板都是用的对象,而不是new对象
    array<int, 3>array1D;
    array<int, 3>* p = new array<int, 3>;
    for (int i = 0; i < array1D.size(); i++)
    	array1D[i] = i;
    }
    void testEXoperator() {
    	//使用:和数组一样的用法
       array<int, 3> num = { 1,2,3 };
        cout << num.empty() << endl;
         cout << num.size() << endl;
       num.fill(4);
     for (auto v : num)//循环输出num中的所有元素
        cout << v<<" ";
       cout << endl;
      array<int, 3> num1 = { 2,3,4 };
      num1.swap(num);//交换:长度要一样长
      for (auto v : num)
       cout << v << " ";
         cout << endl;
    }
    class Miss {
    public:
    	Miss(){}
    	Miss(string name,int age):name(name),age(age){}
    	void print() { cout << name << " " << age << endl; }
    protected:
    	string name;
    	int age;
    };
    void testMiss() {
    	array<Miss, 3> array2D;
    	array<Miss, 3>::iterator iter;
    	for (int i = 0; i < array2D.size(); i++) {
    		string name = "name";
    		array2D[i] = Miss(name + to_string(i), 16 + i);
    	}
    	for (auto v : array2D) {
    		v.print();
    	}
    	//end最后一个位置,不是最后一个元素的位置
    	(*array2D.begin()).print();
    	(*(array2D.end() - 1)).print();//(*array2D.end()).print();越界访问
    	//迭代器访问
    	//对象模仿指针, *迭代器就是取值运算
    	for (iter=array2D.begin();iter!=array2D.end(); iter++)
    		(* iter).print();
    }
    
    int main() {
    	testEXoperator();
    	 testMiss();
    	 TestMyArray();
    	return 0;
    }

动态数组

  • vector
    #include<iostream>
    #include<vector>
    #include<string>
    using namespace std;
    template<class _Ty>
    void print(vector<_Ty>& temp) {
    	for (auto v : temp)
    		cout << v << "  ";
    }
    void testVec() {
    	//模板类型:存储数据类型
    	//不带长度的创建方式
    	vector<int>data;
    	//只能用成员函数插入
    	for (int i = 0; i < 3; i++)
    		data.push_back(i) ;
    	print(data);
    	cout << endl;
    	//带长度
    	vector<string>strData(3);//当前动态数组的长度是3
    	//确定长度可以直接用数组插入
    	 for (int i = 0; i < 3; i++){
    		string name = "name";
    		strData[i] = name + to_string(i);
    	}
    	 strData.push_back("name3");//在这个函数中做了自动扩增
    	 print(strData);
    	 cout << endl;
    	//带初始化
    	vector<float>dData = { 1.1,1.2,1.3 };//自动算出长度为3
    	print(dData);
    	cout << endl;
    }
    class Miss {
    public:
    	Miss(string name ,int age):name(name),age(age){}
    	friend ostream& operator<<(ostream& out,const Miss& miss) {
    		out << miss.name << " " << miss.age;
    		return out;
    	}
    protected:
    	string name;
    	int age;
    };
    void testMiss() {
    	vector<Miss>data;
    	for (int i = 0; i < 3; i++){
    		string name = "name";
    		data.push_back(Miss(name + to_string(i),18+i));
    }
    	print(data);
    }
    void testEXoperator() {
    	vector<int>idata = { 0,1,2,3,4 };
    	cout << idata.size() << endl;//当前元素中的元素个素
    	cout << idata.empty() << endl;//判断是否为空,return size==0;有元素返回false
    	cout << idata.front() << endl;//访问第一个元素
    	cout << idata.back() << endl;//访问最后一个元素
    	cout << idata.at(2) << endl;//下标方式访问
    	cout << idata[2] << endl;//跟楼上效果一样
    	//修改
    	idata.emplace(idata.begin() + 2, 100);//修改下标是2的元素的值为100
    	idata.emplace_back(999);//在最后插入999
    	print(idata);
    	//删除
    	idata.erase(idata.begin()+2);//数组只有伪删除,没有删除操作
    	print(idata);
    	//批量复制
    	int array[] = { 1,2,3 };
    	vector<int>vecData;
    	vecData.assign(array, array + 3);//不需要起始长度
    	print(vecData);
    }
    
    int main() {
    	testVec();
    	testMiss();
    	testEXoperator();
    	return 0;
    }

    vector与array的嵌套

    #include<iostream>
    #include<string>
    #include<array>
    #include<vector>
    #include<ctime>
    #include<cstdlib>
    using namespace std;
    void arrayVSarray()//定态数组嵌套定态数组
    {
    array<array<int, 3>, 4>data;
    	for(int i=0;i<4;i++){
    		for (int j = 0; j < 3; j++){
    			data[i][j] = i * j;
    			cout << data[i][j]<<" ";
    }
    		cout << endl;
    	}
    }
    void vectorVSvector()//动态数组嵌套动态数组
    {
    	vector<vector<int>>data;
    	srand((unsigned int)time(nullptr));
    	for (int i = 0; i < 4; i++) {
    		vector<int>temp;
    		for (int j = 0; j < rand()% 3 + 2; j++) {
    			temp.push_back(i * j);
    		}
    		data.push_back(temp);
    	}
    	for (int i = 0; i < data.size(); i++) {
    		for (int j = 0; j < data[i].size(); j++) {
    			cout << data[i][j] << " ";
    		}
    		cout << endl;
    	}
    }
    void arrayVSvector()//定态数组嵌套定态数组
    {
    	array<vector<int>, 3>data;
    	vector<int>vec[] = { {1,2,3},{2,3,5},{3,4,6} };
    	for (int i = 0; i < data.size(); i++)
    		data[i] = vec[i];
    	for (int i = 0; i < data.size(); i++){
    		for (int j = 0; j < data[i].size();j++)
    		cout << data[i][j] << " ";
       }
    	cout << endl;
    }
    void vectorVSarray()//定态数组嵌套定态数组
    {
    	vector<array<int, 3>>data;
    	array<int, 3>arr[] = { {1,2,3},{2,3,5},{5,6,7} };
    	for (int i = 0; i < 3; i++)
    		data.push_back(arr[i]);
    	for (int i = 0; i < data.size(); i++) {
    		for (int j = 0; j < data[i].size(); j++)
    			cout << data[i][j] << " ";
    	}cout << endl;
    }
    int main() {
    	vectorVSvector();
    	arrayVSvector();
    	vectorVSarray();
    	return 0;
    }

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-12-15 18:43:00  更:2021-12-15 18:44:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 5:34:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码