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