如何从数组C ++初始化向量

时间:2016-07-04 03:12:59

标签: c++ arrays vector

如何将数组成员传输到向量。

4 个答案:

答案 0 :(得分:2)

您可以使用带有两个迭代器的向量构造函数对其进行初始化,如下所示:

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

作为家庭班级的成员,您可以在初始化列表中执行此操作:

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

答案 1 :(得分:1)

我可能会使用以下内容:

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

(这假设chairarray的元素和points的元素是相同的。)

您可能会进行分类,因为您正在尝试修改尚不存在的points成员。例如,如果points[0]的当前大小为零,则无法设置points

答案 2 :(得分:0)

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

vector容器初始化对象有4种方法,这里有一些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 Lindley使用的是最后一个,points.insert(points.end(), chairarray, chairarray + arraysize);vector中的一种方法,有很多方法可以解决关于“从数组初始化向量”的主要问题:)

答案 3 :(得分: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());