簡體   English   中英

如何從數組C ++初始化向量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM