首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我可以将std::vector<int>*转换为int*吗?

我可以将std::vector<int>*转换为int*吗?
EN

Stack Overflow用户
提问于 2015-11-11 01:04:51
回答 2查看 7.8K关注 0票数 2

假设我有一个std::vector<int>* foo;,我必须使用它作为int* ( int数组,而不是指向int的指针),用于旧的C类型库PVM。就我而言,这可能有效,因为vector存储内存中彼此相邻的元素,就像数组一样。所以我尝试了(int*)foo,但是不知怎么的,我得到了一个无法调试的错误,所以我认为这一定是问题所在。有什么想法,想法,优雅的解决方案吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-11 01:06:27

不能将向量直接转换为数组,因为向量对象由指向数组数据的指针组成,而不是由动态分配的数组数据本身组成。若要访问基础数组,请使用data()成员函数:

代码语言:javascript
运行
复制
std::vector<int> vec;

int *arr = vec.data();

代码语言:javascript
运行
复制
std::vector<int> *vecp = new std::vector<int>;

int *arr = vecp->data();
票数 10
EN

Stack Overflow用户

发布于 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。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33642579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档