C++ 使用相同元素初始化数组
是否有使用常量初始化固定大小数组的快捷方式。例如,我需要C++ 使用相同元素初始化数组,c++,C++,是否有使用常量初始化固定大小数组的快捷方式。例如,我需要int数组[300],300个空格中的每一个都有10个,是否有技巧避免写10300次?您可以使用: int数组[300]={0};//使用所有0初始化数组 std::fill_n(数组,300,10);//用10填充数组 这里有一个编译时解决方案,它使用初始化(使用std::array而不是C数组): 模板 constexpr std::数组生成填充数组( std::索引_序列, T常数与值 ) { 返回{((void)Is,value)…
int数组[300]
,300个空格中的每一个都有10个,是否有技巧避免写10300次?您可以使用:
int数组[300]={0};//使用所有0初始化数组
std::fill_n(数组,300,10);//用10填充数组
这里有一个编译时解决方案,它使用初始化(使用std::array
而不是C数组):
模板
constexpr std::数组生成填充数组(
std::索引_序列,
T常数与值
)
{
返回{((void)Is,value)…};
}
模板
constepr std::数组生成填充数组(T const&value)
{
返回make_filled_数组(std::make_index_sequence(),value);
}
auto xs=制作填充数组(10);
auto ys=制作填充阵列(10);
注意,这不会初始化固定数组,它通过赋值填充。它也不是constepr
,因此您不能在编译时使用它来获得相同的效果。可能与std::array
重复,您可以实现某种方法以这种方式初始化该数组,对于C-array,更简单的方法是填充它。std::vectorv(300,10)
您可以颠倒模板参数的顺序,以允许T
扣减。
template<std::size_t N, typename T, std::size_t... Is>
constexpr std::array<T, N> make_filled_array(
std::index_sequence<Is...>,
T const& value
)
{
return {((void)Is, value)...};
}
template<std::size_t N, typename T>
constexpr std::array<T, N> make_filled_array(T const& value)
{
return make_filled_array<N>(std::make_index_sequence<N>(), value);
}
auto xs = make_filled_array<300, int>(10);
auto ys = make_filled_array<300>(10);