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 );
}