2016-07-04 29 views
-1

如何将数组的成员传递给向量。如何从数组C++初始化向量

+0

请为'points'提供完整的声明。 – Olipro

+0

'int values [] = {1,2,3}; std :: vector 拷贝(std :: begin(values),std :: end(values));' – p0pa

+0

你是什么意思的“transfer”? – juanchopanza

回答

2

您可以用向量构造函数,两个迭代器,像这样初始化:

std::vector<chair> points(chairarray, chairarray + arraysize); 

至于你的房子类的成员,你会做的是,在初始化列表:

house::house(int arraysize, chair* chairarray) 
    :points(chairarray, chairarray + arraysize) 
{} 
+0

为什么添加chairarray和数组大小? – Alex

+0

@Jane:因为它给了你一个指向数组结尾的指针(或者说,结束之后的一个元素),并且矢量用从chairarray开始直到但不包括该点的所有元素进行初始化。它类似于'std :: vector :: end'返回的结果(或者任何容器的结束成员函数)。 –

+0

感谢您的信息! – Alex

1

我可能会使用类似以下的东西:

points.insert(points.end(), chairarray, chairarray + arraysize); 

(这是一个假设针对这样的chairarraypoints元素的元素是一样的。)

你很可能因为段错误你正在试图修改的points成员还不存在。例如,如果当前尺寸为points为零,则不能设置points[0]

0

首先,段错误问题,就像@ md5i提到的那样,语句std::vector<chair> points;是用默认构造函数初始化points,所以大小为零。

有4种方法vector容器初始化对象,这里有一些代码段形式STL源:

explicit vector(const allocator_type& __a = allocator_type()) 
: _Base(__a) {} 

vector(size_type __n, const _Tp& __value, 
    const allocator_type& __a = allocator_type()) 
: _Base(__n, __a) 
{ _M_finish = uninitialized_fill_n(_M_start, __n, __value); } 

explicit vector(size_type __n) 
: _Base(__n, allocator_type()) 
{ _M_finish = uninitialized_fill_n(_M_start, __n, _Tp()); } 

vector(const vector<_Tp, _Alloc>& __x) 
: _Base(__x.size(), __x.get_allocator()) 
{ _M_finish = uninitialized_copy(__x.begin(), __x.end(), _M_start); } 

什么@Benjamin林德利所用的是最后一个,和points.insert(points.end(), chairarray, chairarray + arraysize);是一种方法在vector,所以许多方法来解决你的主要问题“初始化从数组向量”:)

+0

谢谢,这是很好的信息。 – Alex

0

你需要首先分配点的元素。只需添加一行:

house::house(int arraysize, chair* chairarray) 
{ 
    points.resize(arraysize); // add this 
    for(int i=0; i<arraysize; ++i) 
    { 
     points[i].x=chairarray[i].x; 
     points[i].y=chairarray[i].y; 
    } 
} 

通用副本也可以为您节省大量的打字:

points.resize(arraysize); 
std::copy(chairarray, chairarray+arraysize, points.begin());