首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用c样式API迭代std::using中的所有元素

使用c样式API迭代std::using中的所有元素
EN

Stack Overflow用户
提问于 2016-07-01 22:25:32
回答 1查看 90关注 0票数 0

根据“项目16.知道如何将向量和字符串数据传递给遗留API”。斯科特·迈尔斯的有效STL:

使用c样式API访问向量的所有元素是安全的,因为向量与数组具有相同的底层内存布局。

代码语言:javascript
复制
//example 1, do sth to all elements in vector using c-style API
void doSomething(const int *pInts, size_t numlnts);

vector<int> v;   
if (!v.empty()) {
    doSomething(&v[0], v.size()); 
}

//example 2, init vector with c-style API
size_t fillArray(double *pArray, size_t arraySize); 

vector<double> vd(maxNumDoubles);    
vd.resize(fillArray(&vd[0], vd.size())); 

要将向量与c样式API结合使用,c++标准中对元素类型T有什么要求吗?

T是内建型还是POD型总是安全的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-02 00:04:55

不,不需要元素类型T。向量将分配内存,以便向量中的每个元素消耗相当大的(T)字节。当您编写一个循环,通过指针算法(或索引,也就是遮罩下的指针算法)在基础数组上迭代时,在增量/减少期间使用完全相同的元素大小( size or(T))。

但是,假设您将在真正的C中读写底层数据数组,那么您将面临这样的限制,即C++类类型(如std::string、MyCustomClass等)不能用作T,因为C函数不可能安全地接受这些类型。只要T是C++和C语言都知道其存储大小的类型(即,它们都可以在不存在编译问题的情况下使用size of (T)),那么您就会处于良好的状态。

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

https://stackoverflow.com/questions/38154565

复制
相关文章

相似问题

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