std::vector,内部存储的所有元素,都是占用一片连续的内存空间。因此,比较好的做法就是直接取第一个元素的地址,得到了首地址,之后的做法与数组也是大同小异了。
举例说明。
假设函数Func需要以数组的方式传递,函数原型如下:
void Func(double* pDataAddress, size_t nDataCount);
那么,如果使用数组,调用的方法如下:
double data[30];
Func(data, 30);
而使用vector,调用的方法如下:
std::vector<double> data(30);
Func(&data[0], data.size());
需要注意的地方:
1、如果vector长度为零,那就不能取得第一个元素的地址。因为此时第一个元素还不存在。程序注意判断。
2、如果vector的长度变长(例如:不停地进行push_back),那可能导致之前取得的地址变为无效。为了安全,每次进行push_back, insert, assign之类的操作之后,就需要重新取得第一个元素的地址。因为之前取得的地址可能已经无效了。
举例说明。
假设函数Func需要以数组的方式传递,函数原型如下:
void Func(double* pDataAddress, size_t nDataCount);
那么,如果使用数组,调用的方法如下:
double data[30];
Func(data, 30);
而使用vector,调用的方法如下:
std::vector<double> data(30);
Func(&data[0], data.size());
需要注意的地方:
1、如果vector长度为零,那就不能取得第一个元素的地址。因为此时第一个元素还不存在。程序注意判断。
2、如果vector的长度变长(例如:不停地进行push_back),那可能导致之前取得的地址变为无效。为了安全,每次进行push_back, insert, assign之类的操作之后,就需要重新取得第一个元素的地址。因为之前取得的地址可能已经无效了。