如何获取指向 2D std::vector 内容的指针

How to get a pointer to a 2D std::vector's contents

本文关键字:vector 指针 std 何获 取指 2D      更新时间:2023-10-16

给定

std::vector<char> theVec

我可以得到如下的指针

char* cc = &theVec[0]

如果矢量声明如下:

std::vector<std::vector<char> > theVec

如何将指向Vec头部的指针转换为字符*

char cc* = 

如何将指针指向Vec的头部(作为字符*(?

你不能。向量的头的类型是std::vector<char>,而不是char,并且std::vector<std::vector<char> >不会将其数据存储在一个连续块中。

相反,你可以这样做:

std::vector<char> theVec;
theVec.resize(xSize*ySize);
char cc* = &theVec[0];
char tmp = theVec[x*xSize + y];//instead of theVec[x][y]
std::vector<char> * p = &theVec[0];

如果你想要一个指向第一个字符的指针,那么:

char * p = &theVec[0][0];

但是,要小心,因为将指针迭代过第一个子向量不会像多维数组那样将其移动到下一个向量。要获得指向下一个子向量头部的指针,可以使用:

p = &theVec[1][0];