[英]how to initialize vector from array C++
您如何将数组的成员转移到向量。
您可以使用带有两个迭代器的vector构造函数对其进行初始化,如下所示:
std::vector<chair> points(chairarray, chairarray + arraysize);
作为house类的成员,您可以在初始化列表中执行以下操作:
house::house(int arraysize, chair* chairarray)
:points(chairarray, chairarray + arraysize)
{}
我可能会使用以下内容:
points.insert(points.end(), chairarray, chairarray + arraysize);
(这是假设chairarray
的元素和points
的元素是相同的。)
您可能会进行段错误处理,因为您正在尝试修改尚不存在的points
成员。 例如,如果当前points
为零,则不能设置points[0]
。
首先,就像@ md5i提到的那样,段错误问题是std::vector<chair> points;
语句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
中的一种方法,因此有很多方法可以解决有关“从数组初始化矢量”的主要问题:)
您需要先在点中分配元素。 只需添加一行:
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());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.