You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,再访问它的第一个元素,正确写法有两种:

  1. 使用解引用运算符后再访问下标:
printf("read size %d, %d\n", vec->size(), (*vec)[0].size());
  1. 使用->结合at()方法(更安全,会检查越界):
printf("read size %d, %d\n", vec->size(), vec->at(0).size());

修改后,read_size函数的输出就会和main里一致,都是100, 50。

内容的提问来源于stack exchange,提问作者Ryuk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 02:27:16