回 帖 发 新 帖 刷新版面

主题:请问,vector如何转换成数组?

要调用一个大型数学软件包,需要数组指针形式。但是数据用vector存比较好。怎么把vector转成数组呢?
我看C++ Primer上面只说了数组可以看成vector,只要传递首末指针即可。那反过来,怎么把vector转成数组呢?谢谢!

回复列表 (共3个回复)

沙发

//通过vector类的size()操作
vector<Elemtype> Evec //[color=00FF00]定义一个vector类型的变量Eevec[/color]
{
   for(int i=0;i< Evec.size(); ++i)
   {
        ...Evex[i]....//类似于数组进行操作
    }
}
//通过迭代器进行操作
vector<int>::iterator iter;
for(iter = ivec.begin(); iter != ivec.end(); ++iter)
{
    cout << *iter << " ";

板凳


有没有不这样复制的?内存占用太大。写!

3 楼

不必复制数据。
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之类的操作之后,就需要重新取得第一个元素的地址。因为之前取得的地址可能已经无效了。

我来回复

您尚未登录,请登录后再回复。点此登录或注册