我正在尝试使用OpenCL来提高我们软件的速度.我们经常使用地图,为简化起见,将地图表示为std :: vector <std :: vector>.OpenCL API将原始的c样式指针作为参数,例如上面的情况中的int*.
我的问题:
谢谢.
jal*_*alf 17
在stl中是否存在实现保证,向量内部是否在内存中连续?
从C++ 03开始,是的,保证向量使用连续存储.(在C++ 98中,存在意外漏洞,因此实现可以假设使用非连续存储,但它在2003版本的标准中得到修复 - 并且没有实现实际使用非连续存储,因为它是一个可怕的想法)
我可以安全地将std :: vector转换为int*并期望它能够工作吗?
通常的方式是&v[0].(&*v.begin()可能也会工作,但我似乎记得在标准中有一些蓬松的措辞,这使得这不是100%可靠)
不,你为什么期望这样?矢量是一个类.它不是指针.它只包含一个指针.
在向量向量的情况下,我仍然可以认为这是正确的吗?我希望矢量可以保存其他状态数据,或对齐问题,或者其他东西......
无论你存储在哪里,矢量的行为都是一样的.如果你创建了一个向量向量,最后会得到一个包含指向堆分配数组的指针的对象,其中每个元素都是一个包含指向堆分配数组的指针的对象.
至于你应该怎么做,这取决于很多因素.您的总数据集有多大?您可能希望连续分配整个表.使用向量向量,每行是单独的分配.
- stl 中是否有实现保证向量
在内存中在内部是连续的
是的,它是一个动态数组。标准保证向量中的对象是连续存储的。
- 我可以安全地将 std::vector 转换为 int* 并期望它起作用吗?
不,但您可以使用 begin() 并将其用作指针。
- stl 中是否有实现保证向量
在内存中在内部是连续的
不,因为向量可能包含一些内部成员变量,所以整个二维数组不会是连续的内存位置