C++中二维vector指针读取尺寸错误问题求助
问题描述
创建二维std::vector后,通过指针读取尺寸时得到错误结果,期望两处输出的尺寸均为100和50,但实际输出不符合预期。
代码示例:
#include <stdio.h> #include <vector> void read_size(std::vector<std::vector<float>> *vec) { printf("read size %d, %d\n", vec->size(), vec[0].size()); } int main() { std::vector<std::vector<float>> vec; vec.resize(100); vec[0].resize(50); printf("main %d, %d\n", vec.size(), vec[0].size()); read_size(&vec); return 0; }
程序输出:
main 100, 50 read size 100, 100
问题原因与解决方法
问题出在read_size函数里的vec[0].size()写法。这里的vec是指针类型(std::vector<std::vector<float>>*),对指针使用下标运算符[]时,vec[0]等价于*(vec + 0),也就是直接解引用指针得到外层的std::vector,因此vec[0].size()获取的是外层vector的尺寸(100),而不是外层vector第一个元素的尺寸。
要获取内层vector的尺寸,需要先解引用指针得到外层vector,再访问它的第一个元素,正确写法有两种:
- 使用解引用运算符后再访问下标:
printf("read size %d, %d\n", vec->size(), (*vec)[0].size());
- 使用
->结合at()方法(更安全,会检查越界):
printf("read size %d, %d\n", vec->size(), vec->at(0).size());
修改后,read_size函数的输出就会和main里一致,都是100, 50。
内容的提问来源于stack exchange,提问作者Ryuk
相关产品推荐
相关产品推荐

