C++ 将作为参数传入的对象数组转换为向量

C++ 将作为参数传入的对象数组转换为向量,c++,vector,iterator,C++,Vector,Iterator,我正在尝试将一个墙数组转换为一个墙向量。数组作为参数传入,在函数中我试图使用insert()转换它。我收到一个错误,它说“没有重载函数的实例”std::begin“与参数列表匹配——参数类型为:(Wall*)” 当我的墙数组作为参数传递时,它会发生什么情况。参数Wall walls[]将衰减为Wall*walls。由于丢失了长度信息,因此需要将该数组中的元素数作为参数传递。像这样: int func(int row, int col, Wall* walls, int len) { st

我正在尝试将一个墙数组转换为一个墙向量。数组作为参数传入,在函数中我试图使用
insert()
转换它。我收到一个错误,它说“没有重载函数的实例”std::begin“与参数列表匹配——参数类型为:(Wall*)”


当我的墙数组作为参数传递时,它会发生什么情况。

参数
Wall walls[]
将衰减为
Wall*walls
。由于丢失了长度信息,因此需要将该数组中的元素数作为参数传递。像这样:

int func(int row, int col, Wall* walls, int len) {
    std::vector<Wall> vecWalls;
    vecWalls.insert(vecWalls.begin(), walls, walls + len);

    //or shorter:
    std::vector<Wall> vecWalls2(walls, walls + len);
}
int func(int行、int列、Wall*walls、int len){
向量向量;
插入(vecWalls.begin(),墙,墙+透镜);
//或更短:
标准::向量向量向量向量2(墙,墙+透镜);
}

简单C数组对迭代器一无所知,但您可以在最后一个数组项的第一个和下一个上使用简单指针填充std::vector

int func(Wall* walls, size_t arraySize)
{
    std::vector<Wall> vecWalls;
    vecWalls.insert(vecWalls.begin(), &walls[0], &walls[arraySize]);

    return 0;
}

int main()
{
    Wall walls[10] = {};
    // Fill walls array

    const size_t arraySize = sizeof(walls) / sizeof(walls[0]);
    func(walls, arraySize);
}
int func(墙*墙,大小\u t排列)
{
向量向量;
插入(vecWalls.begin(),&walls[0],&walls[arraySize]);
返回0;
}
int main()
{
墙[10]={};
//填充墙阵列
const size_t arraySize=sizeof(walls)/sizeof(walls[0]);
func(墙、阵列化);
}
此外,如果创建新向量,则可以使用简单数组中的项对其进行初始化,如下所示:

std::vector<Wall> vecWalls2(&walls[0], &walls[arraySize]);
std::向量向量向量墙2(&walls[0],&walls[arraySize]);

标准函数
std::begin
std::end
不能与指针一起用作参数

在函数声明中

int func(int row, int col, Wall walls[]) {
编译器将参数
Wall walls[]
调整为指针类型
Wall*walls
,传递给函数数组的参数也隐式转换为指向其第一个元素的指针

我假设在函数中,墙指向的数组没有改变

在这种情况下,可以通过以下方式定义函数

int func( int row, int col, const Wall walls[], size_t n ) {
  // Some code before ...

  // Converting array of Wall to vector
  std::vector<Wall> vecWalls( walls, walls + n );
 }
int func(int行,int列,const Wall walls[],大小){
//之前的一些代码。。。
//将墙的数组转换为向量
标准::向量向量向量墙(墙,墙+n);
}

它衰减为指针。只需一直使用
std::vector
int func(int row, int col, Wall walls[]) {
int func( int row, int col, const Wall walls[], size_t n ) {
  // Some code before ...

  // Converting array of Wall to vector
  std::vector<Wall> vecWalls( walls, walls + n );
 }