【发布时间】:2014-01-02 01:11:33
【问题描述】:
我不喜欢过多地使用指针,我一直在使用 stl 工具。我遇到了这种情况,我需要将一个 int** 传递给一个需要使用 2d 整数数组的第三方函数。我编写了以下函数,该函数创建了一个 int*s 向量来完成这项工作。我的问题是,假设 third_party 函数不更改数组的结构并且只访问数据条目,这样做是否安全。有没有更好的方法来做到这一点?
这里是函数def:
void ConvertVectorVectorToIntStarStar(const std::vector<std::vector<int> >& v,vector<int*>* a) {
assert(a);
int n = v.size();
a->resize(n);
for(int i = 0; i < n; ++i)
(*a)[i] = (int*)(&v[i][0]);
}
这是用法:
vector<int*> p;
ConvertVectorVectorToIntStarStar(v, &p);
int** a = &p[0];
third_party_function(a);
【问题讨论】:
-
您可以使用
v.data()代替&v[0]。 -
@Jarod42:那只是在 C++11 中,问题被标记为 C++。
-
&v[0]如果v.empty()是非法的,所以如果你缺少.data()你应该v.empty()?NULL:&v[0],这很烦人,或者升级你的编译器,这是彩虹。 -
OP,你有 C++11 支持吗?数组是“锯齿状的”还是大小都一样?它们在运行时是否会发生变化——它们是如何结束的?
-
@Yakk 不,我没有 11。我不在乎 v 为空的情况,因为这不会发生。