Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.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
使用模板从参数列表创建std::vector 我有很多C代码,我必须用C++编写。我在C++方面没有太多的经验。_C++_Arrays_Vector - Fatal编程技术网

使用模板从参数列表创建std::vector 我有很多C代码,我必须用C++编写。我在C++方面没有太多的经验。

使用模板从参数列表创建std::vector 我有很多C代码,我必须用C++编写。我在C++方面没有太多的经验。,c++,arrays,vector,C++,Arrays,Vector,我正在使用Visual Studio 2012来构建。该项目是C++中的一个静态库(不是C++/CLI中的) 如果这个问题已经得到回答,我很抱歉,但我就是找不到 在C#代码中,它们会初始化许多数组,如下所示: C# 查看它们是如何使用数组的,当将代码复制到C++时,我决定使用STD:vector替换它们。我希望能够以同样的方式初始化向量,因为在单元测试中,它们大量使用数组初始化,但我不能。我想在C++的其他版本中,向量支持它,但不是我所拥有的。 (更新)为了让我之前的发言更清楚: 这在VS201

我正在使用Visual Studio 2012来构建。该项目是C++中的一个静态库(不是C++/CLI中的)

如果这个问题已经得到回答,我很抱歉,但我就是找不到

在C#代码中,它们会初始化许多数组,如下所示:

C#

查看它们是如何使用数组的,当将代码复制到C++时,我决定使用STD:vector替换它们。我希望能够以同样的方式初始化向量,因为在单元测试中,它们大量使用数组初始化,但我不能。我想在C++的其他版本中,向量支持它,但不是我所拥有的。 (更新)为了让我之前的发言更清楚:

这在VS2012中不起作用:

vector<double> myVector{10, 20, 30, 40};
向量myVector{10,20,30,40};
从那时起,我学会了从数组中创建向量,所以现在我有了如下函数:

C++

template<typename T, size_t N>
static std::vector<T> GetVectorFromArray( const T (&array)[N] )
{
    return std::vector<T>(array, array+N);
}
模板
静态std::vector GetVectorFromArray(常量T(&array)[N])
{
返回std::vector(数组,数组+N);
}
它工作得很好,但现在这意味着我必须创建数组,然后使用我的函数:

C++(我希望避免这种情况,因为UnitTests有许多数组。)

双数组[]={1,3,5};
向量myVector=ArrayUtils::GetVectorFromArray(数组);
有没有一种方法可以让函数GetVectorFromArray接收一个项目列表,然后将其转换为向量?
我的编译器不支持C++11,Visual studio 2012不支持。您可以使用VS 2013提供支持(或g++)

Visual studio 2012不支持。您可以使用VS 2013提供支持(或g++)

Visual studio 2012不支持。您可以使用VS 2013提供支持(或g++)

Visual studio 2012不支持。您可以使用VS2013作为支持(或g++)

除非在声明中初始化数组,否则不能使用“文字”数组

至少以前是这样,这允许你想要什么,但有一个论点:

template<typename T>
static std::vector<T> GetVectorFromArray( std::initializer_list<T> list )
{
    return std::vector<T>(list);
}
甚至

std::vector myVector{1,3,5};
注意:不幸的是,VS2012不支持这些功能,因此您要么使用临时数组,要么升级到支持它的编译器(如VS2013、GCC或Clang)


还有其他选择。其中之一是Boost赋值库(由marktolonen编写)

也可以使用旧的C样式变量参数。有关如何操作的提示,请参见e.g.及其。为此,您需要提供参数列表中元素的数量作为第一个函数参数,或者提供一个特殊的哨兵来标记列表的结尾。警告:虽然这是从C直接继承的,但是C++提供的额外类型安全不存在。如果给出了错误类型的参数(例如
double
char
),则可能会得到未定义的行为

唯一的另一种解决方案是模拟Boost赋值库,但对于这样一件简单的事情,这将需要大量的代码。

除非在声明中初始化数组,否则不能使用“文字”数组

至少以前是这样,这允许你想要什么,但有一个论点:

template<typename T>
static std::vector<T> GetVectorFromArray( std::initializer_list<T> list )
{
    return std::vector<T>(list);
}
甚至

std::vector myVector{1,3,5};
注意:不幸的是,VS2012不支持这些功能,因此您要么使用临时数组,要么升级到支持它的编译器(如VS2013、GCC或Clang)


还有其他选择。其中之一是Boost赋值库(由marktolonen编写)

也可以使用旧的C样式变量参数。有关如何操作的提示,请参见e.g.及其。为此,您需要提供参数列表中元素的数量作为第一个函数参数,或者提供一个特殊的哨兵来标记列表的结尾。警告:虽然这是从C直接继承的,但是C++提供的额外类型安全不存在。如果给出了错误类型的参数(例如
double
char
),则可能会得到未定义的行为

唯一的另一种解决方案是模拟Boost赋值库,但对于这样一件简单的事情,这将需要大量的代码。

除非在声明中初始化数组,否则不能使用“文字”数组

至少以前是这样,这允许你想要什么,但有一个论点:

template<typename T>
static std::vector<T> GetVectorFromArray( std::initializer_list<T> list )
{
    return std::vector<T>(list);
}
甚至

std::vector myVector{1,3,5};
注意:不幸的是,VS2012不支持这些功能,因此您要么使用临时数组,要么升级到支持它的编译器(如VS2013、GCC或Clang)


还有其他选择。其中之一是Boost赋值库(由marktolonen编写)

也可以使用旧的C样式变量参数。有关如何操作的提示,请参见e.g.及其。为此,您需要提供参数列表中元素的数量作为第一个函数参数,或者提供一个特殊的哨兵来标记列表的结尾。警告:虽然这是从C直接继承的,但是C++提供的额外类型安全不存在。如果给出了错误类型的参数(例如
double
char
),则可能会得到未定义的行为

唯一的另一种解决方案是模拟Boost赋值库,但对于这样一件简单的事情,这将需要大量的代码。

除非在声明中初始化数组,否则不能使用“文字”数组

至少以前是这样,这允许你想要什么,但有一个论点:

template<typename T>
static std::vector<T> GetVectorFromArray( std::initializer_list<T> list )
{
    return std::vector<T>(list);
}
甚至

std::vector myVector{1
std::vector<int> myVector{ 1, 3, 5 };
#include <boost/assign.hpp>
#include <vector>
#include <iostream>

int main()
{
    std::vector<int> v = boost::assign::list_of(1)(2)(3)(4)(5);
    for(auto i : v)
        std::cout << i << std::endl;
}
#include <boost/assign.hpp>
#include <vector>
#include <iostream>

int main()
{
    int array[] = {1,2,3,4,5,6,7,8,9,10};
    std::vector<int> v(std::begin(array),std::end(array));
    for(auto i : v)
        std::cout << i << std::endl;
}