uj2*_*uj2 17 c++ arrays stl vector
说我有一个功能:
void someFunc(int *x,int count);
Run Code Online (Sandbox Code Playgroud)
这是我无法控制的,所以我不能写它来接受迭代器.
这样调用它是否安全(无论具体的STL实现如何):
vector<int> v;
/* ... */
someFunc(&v[0],v.size());
Run Code Online (Sandbox Code Playgroud)
显然,一个反例就是vector<bool>.其他类型怎么样?(假设我没有vector以任何方式专门化).
Job*_*Job 31
从第23.2.4节,标准的第1点:
[...]向量的元素是连续存储的,这意味着如果v是一个向量,其中T是除bool之外的某种类型,那么它遵循所有0的标识&v [n] ==&v [0] + n <= n <v.size().
所以是的,它是安全的.
注意:如果v是空的v[0]是未定义的行为,所以你只能这样做,如果v是没有空.
正如其他人所说,它是安全的.
但我想要一个小预订.如果此函数接受数组并将其存储以供以后使用,则可能存在问题.这是因为如果需要它来改变大小,std :: vector可以自由地释放它的内存.因此,如果此函数只使用数组(复制或其他)或您永远不会改变它,那么它是安全的.
我只想指出这一点,仅仅因为矢量元素是连续存储的,所以传递它并不是自动安全的.所有权仍然是一个问题.
| 归档时间: |
|
| 查看次数: |
9413 次 |
| 最近记录: |