假设我有一个std::vector<int>* foo;
,我必须使用它作为int*
( int数组,而不是指向int的指针),用于旧的C类型库PVM。就我而言,这可能有效,因为vector
存储内存中彼此相邻的元素,就像数组一样。所以我尝试了(int*)foo
,但是不知怎么的,我得到了一个无法调试的错误,所以我认为这一定是问题所在。有什么想法,想法,优雅的解决方案吗?
发布于 2015-11-11 01:06:27
不能将向量直接转换为数组,因为向量对象由指向数组数据的指针组成,而不是由动态分配的数组数据本身组成。若要访问基础数组,请使用data()
成员函数:
std::vector<int> vec;
int *arr = vec.data();
或
std::vector<int> *vecp = new std::vector<int>;
int *arr = vecp->data();
发布于 2015-11-11 01:06:12
是的你可以。您应该通过@ApproachingDarknessFish来使用prefer this answer,因为std::vector::data
是在C++11中引入的。
但是,如果使用的是较早版本的C++,则只需使用&foo[0]
获取容器开始时的int*
即可。
请参阅this question,为什么std::vector::data
比&foo.front()
和&foo[0]
更受欢迎(如果foo
是空的,这两者都会产生未定义的行为!)
看看这个关于this answer内存连续布局的std::vector
,它引用了标准:
23.2.6类模板向量向量 1向量是支持随机访问迭代器的序列容器。此外,它还支持(摊销)恒定时间插入和删除操作的末尾,插入和删除在中间取线性时间。存储管理是自动处理的,但提示可以提高效率。向量的元素是连续存储的,这意味着如果v是一个向量,其中T不是bool,那么对于所有0 <= n< v.size(),它都服从恒等式&vn <= &v +n。
https://stackoverflow.com/questions/33642579
复制相似问题