根据“项目16.知道如何将向量和字符串数据传递给遗留API”。斯科特·迈尔斯的有效STL:
使用c样式API访问向量的所有元素是安全的,因为向量与数组具有相同的底层内存布局。
//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型总是安全的?
发布于 2016-07-02 00:04:55
不,不需要元素类型T。向量将分配内存,以便向量中的每个元素消耗相当大的(T)字节。当您编写一个循环,通过指针算法(或索引,也就是遮罩下的指针算法)在基础数组上迭代时,在增量/减少期间使用完全相同的元素大小( size or(T))。
但是,假设您将在真正的C中读写底层数据数组,那么您将面临这样的限制,即C++类类型(如std::string、MyCustomClass等)不能用作T,因为C函数不可能安全地接受这些类型。只要T是C++和C语言都知道其存储大小的类型(即,它们都可以在不存在编译问题的情况下使用size of (T)),那么您就会处于良好的状态。
https://stackoverflow.com/questions/38154565
复制相似问题