6

C char** を C++ ベクトルに変換するにはどうすればよいでしょうか? これを行うために利用できる組み込みの機能はありますか、それとも一連の反復ステップを通じてそれを達成する方が良いですか?

編集: さまざまな理由から、C 配列の要素数は不明です。それを別のパラメーターとして渡すことは可能ですが、それは絶対に必要ですか?

4

4 に答える 4

18

std::vector2 つのイテレータを取るのコンストラクタを簡単に使用できます。

const char* arr[] = {"Hello", "Friend", "Monkey", "Face"};
std::vector<std::string> v(std::begin(arr), std::end(arr));

または、あなたが本当に持っている場合const char**

const char** p = arr;
std::vector<std::string> v(p, p + 4);

これは、配列からポインターへの変換のarr代わりに直接使用しても機能します。p

于 2013-03-29T18:53:38.260 に答える
8
char** c;
vector<string> v(c, c + 10);

指定された範囲の要素から要素を構築します。10 はここの要素数です

于 2013-03-29T18:52:22.407 に答える
1

2 つのイテレータを取るコンストラクタ、別名rangestd::vectorコンストラクタを使用できます。

char* strings[] = {"aaa", "bbb", "ccc", "ddd"};
std::vector<std::string> v(strings, strings + 4);

4配列のサイズです。この具体的な例では、operatorstringsを使用して配列のサイズを計算することもできます。sizeof

int len = sizeof(strings)/sizeof(char*);
std::vector<std::string> v2(strings, strings + len);

ただし、配列のサイズをポインターから直接取得することはできないため、これは純粋では不可能です (また、配列の減衰char**について何かを読む価値があります)。

于 2013-03-29T19:29:31.280 に答える
0

このワンライナーは、コマンドライン引数をキャプチャするのに役立ちます...

int
main(int argc, char ** argv)
{
  std::vector<std::string> arguments(argv, argv + argc);
}
于 2013-03-29T19:03:52.793 に答える