std::vector,内部存储的所有元素,都是占用一片连续的内存空间。因此,比较好的做法就是直接取第一个元素的地址,得到了首地址,之后的做法与数组也是大同小异了。
举例说明。
假设函数Func需要以数组的方式传递,函数原型如下:
void Func(double* pDataAddress, size_t nDataCount);
那么,如果使用数组,调用的方法如下:
double feature[30];
Func(feature, 30);
而使用vector,调用的方法如下:
std::vector feature(30);
Func(&data[0], data.size());
Func(feature.data(), feature.size());
需要注意的地方:
1、如果vector长度为零,那就不能取得第一个元素的地址。因为此时第一个元素还不存在。程序注意判断。
2、如果vector的长度变长(例如:不停地进行push_back),那可能导致之前取得的地址变为无效。为了安全,每次进行push_back, insert, assign之类的操作之后,就需要重新取得第一个元素的地址。因为之前取得的地址可能已经无效了。
2、vector.data()函数返回数组指针,参考http://www.cplusplus.com/reference/vector/vector/data/
本文详细介绍了如何高效地使用C++标准库中的std::vector来替代传统数组,并通过实例展示了如何将vector作为数组传递给函数,以及在使用过程中需要注意的一些关键事项。
1561

被折叠的 条评论
为什么被折叠?



