Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在一行中初始化stl数组_C++_Arrays_Stl_Valarray - Fatal编程技术网

C++ 在一行中初始化stl数组

C++ 在一行中初始化stl数组,c++,arrays,stl,valarray,C++,Arrays,Stl,Valarray,您好,我想构建一个助手类来初始化stl数组。我想做的是: std::valarray<float> vec(3); vlist_of<float>(vec)(2)(3)(5); std::valarray-vec(3); (vec)(2)(3)(5)的列表; 因此,我可以在运行时仅使用一行命令语句初始化向量。 为了完成以下工作,我尝试了以下结构: template <typename T> struct vlist_of { std::valarr

您好,我想构建一个助手类来初始化stl数组。我想做的是:

std::valarray<float> vec(3);
vlist_of<float>(vec)(2)(3)(5);
std::valarray-vec(3);
(vec)(2)(3)(5)的列表;
因此,我可以在运行时仅使用一行命令语句初始化向量。 为了完成以下工作,我尝试了以下结构:

template <typename T>
struct vlist_of {
    std::valarray<T>& data;
    int i;
    vlist_of(std::valarray<T>& _data):data(_data),i(0) {
        (*this)(data);
    }
    vlist_of& operator()(std::valarray<T>& data){return *this;}
    vlist_of& operator()(const T& t) {
       data [i]=t;
        i++;
        return *this;
    }
};
模板
结构列表{
std::valarray和data;
int i;
vlist of(std::valarray&_data):数据(_data),i(0){
(*此)(数据);
}
vlist_of&operator()(std::valarray&data){return*this;}
运算符()的列表(常数T&T){
数据[i]=t;
i++;
归还*这个;
}
};
如果我执行以下操作,此结构将正常工作:

vlist_of<float> tmp(vec);tmp(2)(3)(4);
tmp(vec)的列表;tmp(2)(3)(4);
有可能是我问的吗?

有。将列表设置为工厂功能:

template <typename T>
vlist_builder<T> vlist_of(std::valarray<T>& data)
{
    return vlist_builder<T>(data);
}
模板
vlist_生成器vlist_of(标准::valarray&data)
{
返回vlist_生成器(数据);
}
现在它起作用了

我个人更喜欢统一初始化:

/*const*/ std::valarray<float> prefer { 2, 3, 5 };
/*const*/std::valarray首选{2,3,5};
见完整样本:

#include <valarray>
#include <vector>
#include <iostream>

template <typename T>
struct vlist_builder
{
    std::valarray<T>& data;
    int i;
    vlist_builder(std::valarray<T>& _data):data(_data),i(0) { }
    vlist_builder& operator()(const T& t)
    {
        data[i++]=t;
        return *this;
    }
};

template <typename T>
vlist_builder<T> vlist_of(std::valarray<T>& data)
{
    return vlist_builder<T>(data);
}

int main()
{
    std::valarray<float> vec(3);
    vlist_of<float>(vec)(2)(3)(5);

    for(auto f : vec)
        std::cout << f << "\n";

    // prefer uniform initialization:
    const std::valarray<float> prefer { 2, 3, 5 };
}
#包括
#包括
#包括
模板
结构列表生成器
{
std::valarray和data;
int i;
vlist_生成器(std::valarray&_data):数据(_data),i(0){
vlist_生成器和运算符()(常量T&T)
{
数据[i++]=t;
归还*这个;
}
};
模板
vlist_生成器vlist_of(标准::valarray&data)
{
返回vlist_生成器(数据);
}
int main()
{
std:valarray-vec(3);
(vec)(2)(3)(5)的列表;
用于(自动f:vec)

std::难道我不明白你在寻找什么样的答案。顺便问一下,
(*this)(数据);
用于什么v@Magtheridon96我认为他正在寻找Valarray的
Boost-Assign
风格的初始化