gpt4 book ai didi

c++ - 将参数作为整数数组传递

转载 作者:行者123 更新时间:2023-11-28 08:17:30 24 4
gpt4 key购买 nike

struct G{

G&operator()(const int**a)
{
v<<a;
std::copy(v.begin(),v.end(),std::ostream_iterator<int>(std::cout, " "));
return *this;
}
friend std::vector<int>&operator<<(std::vector<int>&v,const int** n);
std::vector<int>v;
};

std::vector<int>&operator<<(std::vector<int>&v,const int** n)
{
v.insert(v.begin(),*n,*n+sizeof(*n)/sizeof(*n[0]));
return v;
}

/// use it
G g;
int v[8]={1,2,3,4,5,6,5,4};
g(&v);

我有两个问题,1. 以上代码返回错误 cannot convert parameter 1 from 'int (*)[8]' to 'const int **'
2. 我想将 g 作为 g({1,2,3,4,5,6,5,4}) 而不是 g(&v) 传递。但我不知道该怎么做,总是想知道 g 是否会接受它。
谢谢。

最佳答案

如果您知道您将始终使用大小为 8 的常量数组,

struct G{

G&operator()(int a[8])
{
v.reserve(8);
v.insert(v.begin(), a, a + 8);
std::copy(v.begin(),v.end(),std::ostream_iterator<int>(std::cout, " "));
return *this;
}

std::vector<int>v;
};

/// use it
G g;
int v[8]={1,2,3,4,5,6,5,4};
g(v);

如果不是,则需要将数组的大小与数组一起传递:

struct G{

G&operator()(int* a, int len)
{
v.reserve(len);
v.insert(v.begin(), a, a + len);
std::copy(v.begin(),v.end(),std::ostream_iterator<int>(std::cout, " "));
return *this;
}

std::vector<int>v;
};

/// use it
G g;
int v[8]={1,2,3,4,5,6,5,4};
g(v, sizeof(v) / sizeof(int));

或者如果您总是要使用编译时数组(从它们声明的范围)而不是动态数组,

struct G{

template<unsigned int Len>
G& operator()(int (&a)[Len])
{
v.reserve(Len);
v.insert(v.begin(), a, a + Len);
std::copy(v.begin(),v.end(),std::ostream_iterator<int>(std::cout, " "));
return *this;
}

std::vector<int>v;
};

/// use it
G g;
int v[]={1,2,3,4,5,6,5,4};
g(v);

但请注意,最后一个版本将为您传递给它的每个不同大小的数组生成不同版本的 operator()

关于c++ - 将参数作为整数数组传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7211858/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com