转载自:http://nianning1981.blog.163.com/blog/static/3083014320103171299619/
感谢:http://topic.csdn.net/t/20050429/20/3976956.html
感谢:http://yzyanchao.blogbus.com/logs/47796444.html
不过那边是转载自《effective stl》。
std::vector很方便,但有时调用的函数的参数规定是数组,需要将vector转为数组,另外开辟一个空间,将vector一项项复制过去代价过大,可用下面的方法。
给定一个
vector<int> v;
表达式v[0]生产一个指向vector中第一个元素的引用,所以,&v[0]是指向那个首元素的指针。vector中的元素被C++标准限定为存储在连续内存中,就像是一个数组,所以,如果我们想要传递v给这样的C风格的API:
void doSomething(const int* pInts, size_t numInts);
我们可以这么做:
doSomething(&v[0], v.size());
也许吧。可能吧。唯一的问题就是,如果v是空的。如果这样的话,v.size()是0,而&v[0]试图产生一个指向根本就不存在的东西的指针。这不是件好事。其结果未定义。一个较安全的方法是这样:
if (!v.empty()) {
doSomething(&v[0], v.size());
}
如果你在一个不好的环境中,你可能会碰到一些半吊子的人物,他们会告诉你说可以用v.begin()代替&v[0],因为(这些讨厌的家伙将会告 诉你)begin返回指向vector内部的迭代器,而对于vector,其迭代器实际上是指针。那经常是正确的,但正如条款50所说,并不总是如此,你 不该依赖于此。begin的返回类型是iterator,而不是一个指针,当你需要一个指向vector内部数据的指针时绝不该使用begin。如果你基 于某些原因决定键入v.begin(),就应该键入&*v.begin(),因为这将会产生和&v[0]相同的指针,这样可以让你有更多
的打字机会,而且让其他要弄懂你代码得人感觉到更晦涩。坦白地说,如果你正在和告诉你使用v.begin()代替&v[0]的人打交道的话,你该 重新考虑一下你的社交圈了。(译注:在VC6中,如果用v.begin()代替&v[0],编译器不会说什么,但在VC7和g++中这么做的话, 就会引发一个编译错误)
分享到:
相关推荐
例如,在 C++ 的标准模板库 (STL) 中,std::vector 是一个一维动态数组。 但是,你可以使用这些一维的 Vector 来创建二维数组或更高维度的数据结构。下面我将介绍如何使用一维 Vector(以 C++ 的 std::vector 为例...
SGI STL之vector源码,带注释
STL中vector、list、deque和map的区别
STL vector 知识详解 STL vector 知识详解 STL vector 知识详解 STL vector 知识详解 STL vector 知识详解
详细讲解了STL中vector容器的用法.
本来就是STL类和函数只是易调用不了,写成支持库可调用。 带常用基本排序算法: 大数据 , 数组反转 , 数组排序,去重复,速度快效率高。分割文本||整数 也有代替函数 。 可以静态编译。 详细请看例程。 注意两个...
使用VC++控制台应用程序编写,测试了:vector对象的排序,对象中的大小无序,有重复。
cpp代码-C++ STL之vector动态数组
c++的STL的vector的一个实现。使用了c++11的大部分特性,包含vector的几乎所有功能。仅作学习之用。
每个Timer的对象有一个编号(可以是一个无符号的long或 short),以方便在全局中区分每个Timer对象。 基类提供一个纯虚函数GetTimerID 来取得Timer的编号。
简要的介绍STL中几种只能指针,入门级别,在介绍利弊时也顺带介绍的boost库中的几种指针
array:遵循STL精神的C ++多维数组
介绍stl中三种智能指针,对于学习STL很有帮助.上次面试就被问到了。
秉承STL精神,C ++多维数组关于此库提供了C ++的多维数组类,其设计目标如下:启用将数组参数指定为编译时常量,从而在某些情况下显着提高代码生成效率。 尽可能提供遵循C ++ STL约定的API。 最小的依赖关系和要求...
第一篇 预备知识 第1章 C++编程技术 2 1.1 类和对象 2 1.2 类的继承 5 1.3 函数重载 5 1.4 访问控制 7 1.5 操作符重载 8 1.6 显式类型转换 9 1.7 异常处理 13 ...附录 STL版权说明 438
vector的模拟实现,非常适合初学者学习
实现统计一段文章的每个单词的个数 其中CountDemo使用STL中的Map来实现的 CountDemo2是用一般语言实现,没有用到STL实现的; MapCount是用STL中的Vector和Map共同实现的...此题目是学习STL中的Map和Vector必练的经典题目
c++ STL source code, hash and vector etc