std::vector中元素的压入和清除
来源:互联网 发布:mac svn客户端 E220003 编辑:程序博客网 时间:2024/05/05 21:25
结构体:
struct Node{Node(int x):uid(x) { }Node(const Node& n):uid(n.uid) { cout << "Copy node " << uid << endl; }~Node() { cout << "~Node " << uid << endl; }int uid; // 唯一标识};
有代码:
vector<Node> vec;Node node1(1), node2(2);// insert two nodescout << "nothing pushed" << endl;vec.push_back(node1);cout << "node1 pushed" << endl;vec.push_back(node2);cout << "node2 pushed" << endl;// clear vecvec.clear();cout << "vec cleared" << endl;
代码功能简略说明:定义node1和node2,uid分别为1和2,将两者分别压入vec中,然后执行vec.clear()清除其中元素。
运行输出:
nothing pushed
Copy node 1
node1 pushed
Copy node 1
~Node 1
Copy node 2
node2 pushed
~Node 1
~Node 2
vec cleared
~Node 2
~Node 1
解释:
(1)红色:压入node1时,调用 复制构造函数 初始化node1的副本;
(2)蓝色:在压入node2时,vec的容量不足,开辟新的空间,然后将原来的node1副本拷贝一份到新的空间中(调用 复制构造函数 ),再析构旧的node1副本(调用 析构函数 ),最后压入node2时调用 拷贝构造函数 初始化副本。
(3)绿色:执行vec.clear()操作时,按照压入顺序先后析构vec中的元素。
(4)紫色:程序结束时,析构node1和node2,由于栈帧是后进先出,所以先析构后定义的node2,再析构先定义的node1
2014/11/15
0 0
- std::vector中元素的压入和清除
- std中vector和list容器遍历时元素的动态删除
- 对std::vector<make_pair>中重复元素的删除
- 从std::vector中移除指定元素的方法
- std::vector向量的创建、添加和删除元素
- std::vector和std::list访问元素的速度真的很慢吗?
- std::vector删除重复元素和查找
- std::vector删除重复元素和查找
- std::vector删除重复元素和查找
- vector中清除某个元素方法(erase)
- 关于cocos2dx 中 std::vector中删除某个元素的认识
- std::vector erase 没有清除对象的问题
- 计算Vector中元素的和
- 关于从std::vector中删除std::string的方法
- std::vector中erase的用法误区
- std::vector中erase函数的用法
- std::vector<std::string>::size_type和 int的区别
- C++ std::vector元素的内存分配问题
- import项目后运行报错 Unable to execute dex: java.nio.BufferOverflowException. Check the Eclipse log for sta
- 根据Extjs中grid列表表头自动排序导出数据的实例
- Spring AMQP-快速入门
- Java基础——集合
- Android应用Crash信息收集
- std::vector中元素的压入和清除
- windows程序设计之绘图基础之度量映射模式
- Android 等待的动画效果
- javabase简记 - 第二天
- android 相对布局
- 选择在最美的时候拍婚纱照
- SQL的学习
- 从windows中迁移goagent到ubuntu
- 数论--快速幂取模