C++ 将数组转换为向量的最简单方法是什么?

C++ 将数组转换为向量的最简单方法是什么?,c++,arrays,vector,C++,Arrays,Vector,将数组转换为向量的最简单方法是什么 void test(vector<int> _array) { ... } int x[3]={1, 2, 3}; test(x); // Syntax error. void测试(向量数组) { ... } int x[3]={1,2,3}; 测试(x);//语法错误。 我想以最简单的方式将x从int数组转换为vector。使用带两个迭代器的vector构造函数,注意指针是有效的迭代器,并使用从数组到指针的隐式转换: int x[3]

将数组转换为向量的最简单方法是什么

void test(vector<int> _array)
{
  ...
}

int x[3]={1, 2, 3};
test(x); // Syntax error.
void测试(向量数组)
{
...
}
int x[3]={1,2,3};
测试(x);//语法错误。

我想以最简单的方式将x从int数组转换为vector。

使用带两个迭代器的
vector
构造函数,注意指针是有效的迭代器,并使用从数组到指针的隐式转换:

int x[3] = {1, 2, 3};
std::vector<int> v(x, x + sizeof x / sizeof x[0]);
test(v);
intx[3]={1,2,3};
向量v(x,x+sizeof x/sizeof x[0]);
试验(五);

test(std::vector(x,x+sizeof x/sizeof x[0]);

其中
sizeof x/sizeof x[0]
在本文中显然是
3
;这是获取数组中元素数量的通用方法。请注意,
x+sizeof x/sizeof x[0]
指向最后一个元素之外的一个元素。

指针可以像任何其他迭代器一样使用:

int x[3] = {1, 2, 3};
std::vector<int> v(x, x + 3);
test(v)
intx[3]={1,2,3};
向量v(x,x+3);
测试(五)

就个人而言,我非常喜欢C++2011方法,因为它既不要求您使用
sizeof()
,也不要求您在更改数组边界时记住调整数组边界(如果您愿意,也可以在C++2003中定义相关函数):

#包括
#包括
int x[]={1,2,3,4,5};
向量v(std::begin(x),std::end(x));
显然,对于C++2011,您可能希望使用初始值设定项列表:

std::vector<int> v({ 1, 2, 3, 4, 5 });
向量v({1,2,3,4,5});
您在这里问了一个错误的问题-与其将所有内容强制转换为向量,不如询问如何将测试转换为使用迭代器而不是特定容器。为了保持兼容性,您也可以提供重载(同时免费处理其他容器):


()

一种简单的方法是使用
assign()
函数,该函数在
vector
类中预定义

e、 g

array[5]={1,2,3,4,5};
向量v;
v、 分配(数组,数组+5);//5是数组的大小。

在现实生活中,您可能希望提取出数组大小,例如使用
const size\u t X\u size=3
用于表示数组大小,或根据sizeof计算数组大小。为了可读性,我省略了那个部分。它是复制数组还是指向数组?我关心的是性能
std::vector
始终拥有
T
对象。这有两个含义:当将对象插入向量时,它们被复制,并在内存中并置。对于相当小的对象,例如短字符串序列,搭配是主要的性能增益。如果您的对象很大且复制成本很高,那么您可能需要存储指向这些对象的[以某种方式进行资源管理的]指针。哪种方法更有效,取决于对象,但你有选择。所以,如果我想将C++和C库接口,并从C数组复制到向量和后端,那么没有办法支付2份的惩罚吗?(我正在使用eigen library和gsl)您能解释一下吗?我已经读过向量a(5,10)平均值
为5腾出空间
int`并用10初始化它们。但是你的x,x+。。。作品你能解释一下吗?@UnKnown不是选择
vector::vector(size\u type,int)
,而是选择
vector::vector(int*,int*)
,它复制由这对指针表示的范围。第一个是重载(2),第二个是重载(4),在c++11上std::extent优于sizeof方法
sizeof x/sizeof x[0]==std::extent::value
“与其将所有内容强制转换为向量,不如询问如何将测试转换为使用迭代器而不是特定容器。”为什么这样更好?@aquirdturtle因为现在,除了支持向量之外,您还支持列表和数组、boost容器、转换迭代器和范围……而且您不需要复制数据,就相当于使用了七年前在现有答案中提到的ctor。当ctor不可调用时,不添加任何值,例如向量v已在其他位置构造
#include <iterator>
#include <vector>
int x[] = { 1, 2, 3, 4, 5 };
std::vector<int> v(std::begin(x), std::end(x));
std::vector<int> v({ 1, 2, 3, 4, 5 });
void test(const std::vector<int>& in) {
  // Iterate over vector and do whatever
}
template <typename Iterator>
void test(Iterator begin, const Iterator end) {
    // Iterate over range and do whatever
}

template <typename Container>
void test(const Container& in) {
    test(std::begin(in), std::end(in));
}
int x[3]={1, 2, 3};
test(x); // Now correct
array[5]={1,2,3,4,5};

vector<int> v;
v.assign(array, array+5); // 5 is size of array.