C char** を C++ ベクトルに変換するにはどうすればよいでしょうか? これを行うために利用できる組み込みの機能はありますか、それとも一連の反復ステップを通じてそれを達成する方が良いですか?
編集: さまざまな理由から、C 配列の要素数は不明です。それを別のパラメーターとして渡すことは可能ですが、それは絶対に必要ですか?
std::vector
2 つのイテレータを取るのコンストラクタを簡単に使用できます。
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
char** c;
vector<string> v(c, c + 10);
指定された範囲の要素から要素を構築します。10 はここの要素数です
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**
について何かを読む価値があります)。
このワンライナーは、コマンドライン引数をキャプチャするのに役立ちます...
int
main(int argc, char ** argv)
{
std::vector<std::string> arguments(argv, argv + argc);
}