string の vector の vector のこの初期化をどのように単純化して一般化できるのだろうか :
vector<vector<wstring>> vvValues;
const wchar_t *row1[] = { L"R1C1_variablesize"};
const wchar_t *row2[] = { L"R2C1_vsize" , L"R2C2_varsize", L"R2C3_variabsize"};
const wchar_t *row3[] = { L"R3C1_variablsize", L"R3C2_vasize"};
vvValues.push_back (vector<wstring> (row1, end(vrow1)));
vvValues.push_back (vector<wstring> (row2, end(row2)));
vvValues.push_back (vector<wstring> (row3, end(row3)));
配列の一時配列を使用しようとしています
const wchar_t **rows[] = {row1, row2, row3);
イテレータを使用して、テストに成功しました
for (auto it = begin(rows); it!= end(rows); ++it)
vvValues.push_back (vector<std::wstring> (*it, *it + 0));
row1、row2、row3 で count()、sizeof()、または end() を使用すると、行は期待どおりに機能します。
->しかし、各行の要素数を取得する方法がわかりません
すなわち
sizeof(rows[0]) -> 4
sizeof(rows[1]) -> 12
sizeof(rows[2]) -> 8
またはさらに良い
sizeof(it) -> 4, 12, 8 on each iteration.
どうもありがとう
あなたは私をこの 実用的な解決策に導きます
vector<vector<wstring>> vvValues;
// First string -> # of strings excluding index
const wchar_t *row1[] = { L"1", L"R1C1_variablesize"};
const wchar_t *row2[] = { L"3", L"R2C1_vsize" , L"R2C2_varsize", L"R2C3_variabsize"};
const wchar_t *row3[] = { L"2", L"R3C1_variablsize", L"R3C2_vasize"};
const wchar_t **rows[] = {row1, row2, row3);
for (unsigned long it = 0; it < sizeof(rows)/sizeof(wchar_t *); ++it)
vvValues.push_back (vector<std::wstring> (rows[it] + 1,
rows[it] + 1 + wcstoul(rows[it][0], NULL, 0)));