有没有办法将'std :: vector 2d'作为指向'2d c array'的指针传递给函数

时间:2012-07-19 21:41:31

标签: c++ stl

有没有办法将'std :: vector 2d'作为指向'2d c array'的指针传递给函数。

我知道你可以将std :: vector 1d作为指向c数组的指针传递给某个函数。 例如, 功能:

void foo(char* str); //requires the size of str to be 100 chars

std::vector<char> str_;
str_.resize(100);
foo(&str_[0]); //works

我想知道2d矢量是否有可能 功能

void foo(char** arr_2d);

和矢量

std::vector<std::vector<char>> vector_2d;

我尝试了以下代码但是我得到了一些与堆损坏相关的错误。

std::vector<std::vector<unsigned char>> vector_2d;
//assuming function expects the size of the vector to be 10x10  
vector_2d.resize(10);
for(int i=0;i<10;i++)
{
    vector_2d[i].resize(10);
}
foo(&vector_2d[0]);//error here

2 个答案:

答案 0 :(得分:3)

以下是您可以做的事情:

std::vector< std::vector<unsigned char> > vector_2d;
vector_2d.resize(10);
std::vector<unsigned char*> ptrs(vector_2d.size());
for(int i=0;i<10;i++)
{
    vector_2d[i].resize(10);
    ptrs[i] = &vector_2d[i][0];
}
foo(&ptrs[0]);

答案 1 :(得分:0)

不,你不能这样做。原因是char**是指向char的指针,但&vector_2d[0]的类型为std::vector<char>*

我建议您更改函数的界面以获取您的二维向量(您可能希望将其重新设计为包含单个std::vector<char>的类并提供operator()(int x,int y)来访问元素{{缓冲区中的1}}或者,您可以按需创建所需的数据结构:

(x,y)