向量

2013-07-22 62 views
1

我不知道如何能夠簡化和概括串的矢量的矢量的這個初始化:向量

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))); 
+0

'vector > vvValues {{L「...」},{L「...」,L「...」,L「...」},{L「...」 ,L「...」}};'要容易得多。 – chris

+0

同意C++ 11「完全」兼容的編譯器,但到目前爲止,VC++不接受這個合成器。並猜測是什麼,我使用MS編譯器;) – user2607402

+0

我相信VS2013現在支持它的標準類型,並且在幾個月內即將推出。 – chris

回答

0

你想用一個空字符串結束每一行?例如:

const wchar_t **rows[] = {"Hello", "everyone", "", 
          "start", "of", "row", "2", "", 
          "now", "three", ""}; 

您可以輕鬆地檢查初始化循環中的空值。

但是,如果您的字符串可以爲null,則可以嘗試使用很少用作標記的奇怪字符串。說"~~12~"或甚至更好地使用unicode字符不是你的語言的一部分。

好運。