2017-03-14 14 views
0

私はこのクラスの持っていると仮定します、だから、C++では、どのようにしてベクトルのすべての要素に対して新しいオブジェクトを作成できますか?

dogNamesVector = getListOfDogNames(); 

class dog 
{ 
    public: 
     //dogstuff 
    private: 
     //secret dogstuff 
}; 

をしてから、私は関係のない何かを検索してくれDOG NAMES OF UNKNOWN数を取得する機能を持っています犬の名前のリストは "Spike、Spot、George、Shadow、ect .."のようなものかもしれません。

dog DOGNAME() 

と私が呼ぶと犬の名前のリストで使用できるdogオブジェクトの束を得る:

、その後行くためのスマートな方法はありますか?

vector<dog> dogs {...}; 

そして、我々はすでに、このベクトルで犬があることを前提としています:

+0

あなたは犬の名前のベクトルを繰り返し処理し、それぞれの名前のための 'dog'インスタンスを作成し、おそらくそれらのインスタンスを異なるベクトルに格納することができます。おそらく、あなたは['std :: transform'](http://en.cppreference.com/w/cpp/algorithm/transform)を探していますか?ある範囲で反復処理を行い、別の範囲に基づいて異なる値を追加します。 –

+0

それは良い考えです!しかし、私はそれらを名前で呼ぶことができるいくつかの方法がありますか? Pythonで辞書のような並べ替え? – driedupsharpie

+2

'std :: map 'または 'std :: unordered_map ' –

答えて

-1
std::vector<dog> dogs = get_dogs(); 
std::vector<std::string> dog_names; 

dog_names.reserve(dogs.size()); 

std::transform(std::begin(dogs), std::end(dogs), std::back_inserter(dog_names), [](auto const& dog) { return dog.name(); }); 
+0

コードのみの" answer "の代わりに(コード内のコメントでさえ)便利である。 – zett42

0

だから、あなたが犬のベクトルを持って言うことができます。それはあなたがすでにタイプの犬のオブジェクトを持っていることを意味し、そしてそれらを呼び出すために、あなたがする必要があるだろうすべては、ブラケット表記を使用です:あなたが別のオブジェクトにこの犬を割り当てるしたい場合は、あなたが使用する

dogs[i]; 

を:

dog spike = dogs[i]; 

あなたはユニークな名前(キー、または識別子)を望んでいた場合は、クラス自体に、のようなことを含めます。

private: 
     string dog_name; 

そしてそれにアクセスするために、あなたはメンバ関数になるだろう(o r 'メソッド)。これらのステップのいずれかを何らかの形のループと組み合わせると(必要な場合にはどのような形でも実行できます)、犬オブジェクトを必要な数だけ作成することができます。

0

あなたは文字列のリストを持って、そしてあなたのdogクラスが入力として文字列を構築することができる場合は、文字列リストにイテレータを使用してdogオブジェクトのベクトル、例えば構築することができます。

class dog 
{ 
public: 
    dog(const std::string name) : m_name(name) {} 
private: 
    std::string m_name; 
}; 

std::vector<std::string> dogNames = getListOfDogNames(); 

std::vector<dog> dogs(dogNames.begin(), dogNames.end()); 

Demo

関連する問題