STL中关于vector的一点有趣的事情
PLZ ADD SOURCE: http://www.cnblogs.com/xdxer/p/4072056.html
今日饭后,一哥发给我一段代码,让我看看会不会有什么问题。
#include<iostream>
#include<vector>
#include<string>
using namespace std; int main() { vector<string> v; v.push_back("Hello"); string& x = v[0]; v.push_back("world"); cout<<x; return 0;
}
事实上我第一眼并没有看出什么,但是实际上vector是进行了resize 因为之前没有指定vector的大小。
在 v.push_back("world");之前,我们可以看到:

在v.push_back("world");之后,我们发现v所指向的内容的地址发生了改变,而且 _Last – _First 变成了 0x20 扩大了一倍,所以我断定是vector 运行了resize 进行了内存的重新分配。

让我们再来看看内存方面: 其中 0x 00 63 2f 51 是char *的值。

在 v.push_back("world"); 之后,该段内存被释放,并且C++还做了一件事,就是对此块内存区域进行了擦除,使用0xFE进行填充,也许是为了安全性的方面考虑吧。

总结一句话:写程序要一定要进行深入的考虑,BUG就在你意想不到的地方。
STL中关于vector的一点有趣的事情的更多相关文章
- 转:用STL中的vector动态开辟二维数组
用STL中的vector动态开辟二维数组 源代码:#include <iostream>#include <vector>using namespace std;int mai ...
- STL中的Vector相关用法
STL中的Vector相关用法 标准库vector类型使用需要的头文件:#include <vector>. vector 是一个类模板,不是一种数据类型,vector<int> ...
- (转)C++ STL中的vector的内存分配与释放
C++ STL中的vector的内存分配与释放http://www.cnblogs.com/biyeymyhjob/archive/2012/09/12/2674004.html 1.vector的内 ...
- C++STL中的vector的简单实用
[原创] 使用C++STL中的vector, #include <stdio.h> #include<stdlib.h> #include<vector> usin ...
- STL中的vector实现邻接表
/* STL中的vector实现邻接表 2014-4-2 08:28:45 */ #include <iostream> #include <vector> #include ...
- STL中的vector 和list
参考书目:visual c++ 入门经典 第七版 Ivor Horton著 第十章 认识两个容器:vector和list 容器:是STL(Standard Template Library 标准模板库 ...
- stl 中List vector deque区别
stl提供了三个最基本的容器:vector,list,deque. vector和built-in数组类似,它拥有一段连续的内存空间,并且起始地址不变,因此 它能非常好的支持随 ...
- c++ STL中的vector与list为什么没有提供find操作?
map里有,set里也有,vector,list没有,太不公平了吧. 其实应该考虑为什么map,set里有find操作. include<algorithm>里有通用的find操作,通用的 ...
- STL中向量vector笔记
vector的本质是:数组的封装 特点:读取能在常数时间内完成 Vector成员函数 函数 表述 c.assign(beg,end) c.assign(n,elem) 将[beg; end)区间中的数 ...
随机推荐
- 在c++11中你最惊讶的新feature是什么?
对我来说,我最惊讶竟然把对于多线程的支持加到标准中了.真的想不明确,对于c++这样一种语言.怎么会加进这个东西. 1. 由于各个平台的不同,对于多线程的支持会有很多平台独有的特色.这样c++标准的定义 ...
- python读取txt、csv和excel文件
一.python读取txt文件:(思路:先打开文件,读取文件,最后用for循环输出内容) fp = open('test.txt','r') lines = fp.readlines() fp.clo ...
- spring secrity 一些常用小知识
1.在JSP页面获取当前登录的用户名的方法 首先引入taglib:<%@ taglib prefix="sec" uri="http://www.springfra ...
- Convert Sorted List to Binary Search Tree——将链表转换为平衡二叉搜索树 &&convert-sorted-array-to-binary-search-tree——将数列转换为bst
Convert Sorted List to Binary Search Tree Given a singly linked list where elements are sorted in as ...
- android4.4 evaluateJavascript 到android2.X上不能调用的问题
android4.4上想用js注入的话.不能用旧的loadUrl()方法,每次load都会将页面又一次刷新一次. 可是在2.X的系统版本号上,evaluateJavascript 方法会报异常.解决的 ...
- 转:DDR原理详解
首先,我们先了解一下内存的大体结构工作流程,这样会比较容量理解这些参数在其中所起到的作用.这部分的讲述运用DDR3的简化时序图. DDR3的内部是一个存储阵列,将数据“填”进去,你可以它想象成一张表格 ...
- Linaro/Yocto/Openwrt
http://en.wikipedia.org/wiki/Linaro Linaro From Wikipedia, the free encyclopedia This article ap ...
- 关于input:-webkit-autofill样式问题
最近在整理项目的时候,遇到了一个chrome浏览器自动填充的样式问题, 用户名跟密码的input都设置为透明颜色,但是会变成黄色,打开chrome调试工具,发现有个input:-webkit-auto ...
- SQL查询刚開始学习的人指南读书笔记(三)值表达式
CHAPTER 5 Getting More Than Simple Columns Intro Value expression,it contains column names, literal ...
- HDFS 原理、架构与特性介绍
本文主要讲述 HDFS原理-架构.副本机制.HDFS负载均衡.机架感知.健壮性.文件删除恢复机制 1:当前HDFS架构详尽分析 HDFS架构 •NameNode •DataNode •Senc ...