2016-07-04 10 views
-1

配列のメンバーをどのようにベクトルに転送しますか?あなたの家のクラスの一員として配列からベクトルを初期化する方法C++

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

、あなたは初期化リストでそれを行うだろう:あなたはこのような2回の反復子を取るベクトルのコンストラクタで初期化することができます

+0

'points'のための完全な申告をしてください。 – Olipro

+0

'int values [] = {1、2、3}; std :: vector コピー(std :: begin(values)、std :: end(values)); ' – p0pa

+0

「転送」とはどういう意味ですか? – juanchopanza

答えて

2

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

chairarrayとarraysizeを追加する理由は何ですか? – Alex

+0

@Jane:これはあなたの配列の終わり(あるいは終わりの後ろにある要素)へのポインタを与え、 'chairarray'からその点までを含むすべての要素でベクトルが初期化されるためです。これは、 'std :: vector :: end'が返すもの(またはその点に関してはコンテナの終わりのメンバー関数)に似ています。 –

+0

情報ありがとう! – Alex

1

私はおそらく次のようなものを使用します:

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

(これは、 chairarrayの要素とpointsの要素が同じであるション。)

あなたがまだ存在していないpointsのメンバーを変更しようとしているので、あなたはおそらくセグメンテーションフォルトです。たとえば、pointsの現在のサイズがゼロの場合は、points[0]を設定することはできません。

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リンドレーは、最後のものだった使用、及び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; 
    } 
} 

::ちょうど1行を追加します

points.resize(arraysize); 
std::copy(chairarray, chairarray+arraysize, points.begin()); 
関連する問題