私は C++/一般的なプログラミングを学んでおり、古い標準用に書かれた演習を行いながら C++11 の機能を試すこともあります。
この演習には、文字列へのポインターのベクトルが含まれます。
#include <vector>
#include <string>
#include <iostream>
int main()
{
using std::string ;
using std::vector ;
using std::cout ;
using std::endl ;
vector<string *> v = {new string("Hello") , new string("World")} ;
for (string * x : v) {
cout << *x << " " ;
delete x ;
}
cout << endl ;
}
このベクトルで初期化リストを使用する方法を理解するのに少し苦労しましたが、これはうまくいくようです。
このバージョンも動作します:
//...
string s1 = "Hello" ;
string s2 = "World" ;
vector<string *> v = {&s1 , &s2} ;
for (string * x : v)
cout << *x << " " ;
//...
それはよりきれいに見え、これまでに学んだことから、より良い解決策のようです.
しかし、私は疑問に思っています:事前に文字列を作成したり、削除を使用したりせずにベクトルを初期化する方法は他にありますか? 私が読んだことによると、{} リストは普遍的に使用できるはずです。
そして、それが価値があるために、これはかなり壊滅的なエラーを引き起こします:
vector<string *> v = {"Hello" , "World"} ;