STL学习之十一:容器值(value)语意
来源:互联网 发布:网络用语404是什么梗 编辑:程序博客网 时间:2024/04/30 04:50
本文主要介绍STL的容器值(value)语意。所有容器提供的都是值语意,而非引用语意。容器执行插入元素操作时,内部实施copy工作。所以STL容器存储的元素必须能够被copy,即必须提供copy构造函数。下面以一个示例来说明这一点。在示例中,定义了一个类对象,若使用容器(vector)存入该对象,容器内部会将该对象复制一份到容器中,这就要求对象具有copy的能力而不会发生内存泄漏或空指针现象。具体看下面示例代码:
#define _CRT_SECURE_NO_WARNINGS#include "iostream"#include "vector"using namespace std;class Teacher{public:Teacher(char *name,int age){m_p = new char[strlen(name)+1];strcpy(m_p,name);m_age = age;}~Teacher(){if (m_p != NULL){delete [] m_p;m_p = NULL;m_age = 0;}}Teacher(const Teacher &obj){m_p = new char[strlen(obj.m_p)+1];strcpy(m_p,obj.m_p);m_age = obj.m_age;}// 重载=操作符 t3=t2=t1Teacher& operator=(const Teacher &obj){// 先把t2的旧的内存释放掉if (m_p != NULL){delete [] m_p;m_p = NULL;m_age = 0;}// 根据t1 de 大小分配内存m_p = new char[strlen(obj.m_p)+1];strcpy(m_p,obj.m_p);m_age = obj.m_age;return *this;}public:void printT(){cout << m_p << "\t" << m_age << endl;}protected:public:char *m_p;int m_age;};void main01(){Teacher t1("t1",31);t1.printT();vector<Teacher> v1;v1.push_back(t1);//将t1复制一份到容器中,这是需要考虑对象是否需要copy构造函数for (vector<Teacher>::iterator it = v1.begin();it != v1.end();it++ ){cout << it->m_age << " ";}cout << endl;}void main(){main01();cout << "hello..."<< endl;system("pause");}
阅读全文
0 0
- STL学习之十一:容器值(value)语意
- STL容器,值语意 vs 引用语意 [转链、空帖]
- 【C++】STL常用容器总结之十一:容器小结
- STL学习之map容器(1)
- STL学习之map容器(0)
- STL学习之map容器(3)
- STL(十一)set集合容器
- STL学习之set容器
- STL学习之map容器
- STL学习之map容器
- STL学习之set容器
- STL学习之vector容器
- STL学习总结之容器
- 容器的值拷贝语意
- C++ STL学习笔记十一 hash_set哈希集合容器
- C++ STL学习笔记十一 hash_set哈希集合容器
- C++之STL(十一):容器适配器(stack、 queue 、priority_queue)源码浅析与使用示例
- STL学习之map容器(2)_insert
- K-means聚类算法
- C# Action和Func委托
- Win10开机按F8进不了安全模式没反应 Win10开机按F8怎么无法进入安全模式
- DOCTYPE 作用
- Coursera机器学习笔记(week2)
- STL学习之十一:容器值(value)语意
- 摆方格
- The markup in the document following the root element must be well-formed.
- dubbox 2.8.4的配置和使用
- openWrt patch 打补丁
- 基于kvm+ovs+ryu构建一个SDN环境
- Retrofit 源码分析流程
- 虚拟机管理和虚拟机快照
- HTML5本地存储