mat*_*975 5 c++ arrays pointers stl vector
我想重写一些使用大量unsigned char
数组的代码,而不是使用std::vector<unsigned char>
对象.我遇到的问题是,这些目前用于存储将写入串行端口或套接字写入缓冲区的数据,而库函数要执行此操作,要么使用void*
或者unsigned char*
.这种功能的一个例子是
WriteToSocketBuffer(unsigned char* pBuffer, int iSize);
Run Code Online (Sandbox Code Playgroud)
所以目前我有表格的代码
unsigned char* pArray = new unsigned char[iSize];
// populate array with data
WriteToSocketBuffer(pArray,iSize);
delete [] pArray;
Run Code Online (Sandbox Code Playgroud)
我的问题如下:如果我改变我的类std::vector<unsigned char>
而不是原始数组,我可以简单地调用我的库函数
std::vector<unsigned char> myVector;
WriteToSocketBuffer(&myVector[0],myVector.size());
Run Code Online (Sandbox Code Playgroud)
传递向量中第一个元素的地址是否与传入原始数组中第一个元素的地址相同.这很简单吗?
Alo*_*ave 12
是的,向量的元素保证是连续的,类似于数组.
参考:
C++ 03标准: [lib.vector] 23.2.4类模板向量
......
矢量的元素是连续存储的,这意味着如果v
某个vector<T, Allocator>
地方T
是某种类型bool
,那么它就是服从&v[n] == &v[0] + n
所有人的身份0 <= n < v.size()
C++ 98没有要求对数据中的数据进行连续分配std::vector
,但这就是所有已知实现所做的事情.
从C++ 03开始,这被标准化为一项要求,因此现在需要它,而不仅仅是事情的发生方式.