理解指向指针vector的数组代码 加州伯克利并行算法作业疑问
问题核心解答
你的误解出在对bins变量的类型判断上,具体原因如下:
- 首先看
bins的定义语句:
C++中vector<particle_t*> *bins = new vector<particle_t*>[numbins];new 类型[数量]语法返回的是指向该类型的指针,这里分配的是numbins个vector<particle_t*>类型的连续实例,所以bins是指向vector数组首地址的指针,不是存储粒子指针的数组。 - 指针的下标运算
bins[m]等价于*(bins + m),运算结果就是数组中第m个vector<particle_t*>实例本身,不是指针,所以可以直接用.调用clear()、push_back()这类vector的成员方法,语法完全合法。 - 你误以为的「
bins元素是particle_t*」其实是vector内部存储的元素类型:每个bins[m]这个vector里存储的才是指向particle_t结构体的指针,和你第二段循环里push_back(particles + i)的操作完全匹配。
如果你想验证类型差异,可以对比下面两种写法的区别:
// 现有写法,调用vector实例的方法 bins[m].clear(); // 取地址得到vector指针,用->调用方法 (&bins[m])->clear();
内容的提问来源于stack exchange,提问作者Reza Namvar
相关产品推荐
相关产品推荐

