Я пытаюсь создать Вектор Векторов CStrings; двумерный массив CStrings. Это будет представлять данные в таблице. (Все данные, конечно, CString).
Вот как я пытаюсь инициализировать Вектор>
std::vector<std::vector<CString>> tableData;
for(int r = 0; r < oTA.rows; r++)
for(int c = 0; c < oTA.cols; c++)
tableData[r][c] = "Test";
И вот как я пытаюсь это использовать
for(int r = 0; r < tabAtt.rows; r++)
{
// TextYpos = bottom of table + 5(padding) + (row height * row we're on)
HPDF_REAL textYpos = tabAtt.tabY + 5 + (r*tabAtt.rowH);
for(int c = 0; c < tabAtt.cols; c++)
{
// TextXpos = left of table + 5(padding) + (col width * col we're on)
HPDF_REAL textXpos = tabAtt.tabX + 5 + c*tabAtt.colW;
HPDF_Page_TextOut (page, textXpos, textYpos, (CT2A)tableData[r][c]); // HERE!
}
}
Но я думаю, что я не инициализирую это должным образом. Я продолжаю получать ошибку вектора вне границ.
Это потому, что вам нужно выделить память и сконструировать элементы вектора перед тем, как обращаться к ним. Это должно работать:
std::vector<std::vector<CString>> tableData;
for(int r = 0; r < oTA.rows; r++)
{
tableData.push_back(std::vector<CString>());
for(int c = 0; c < oTA.cols; c++)
tableData.back().push_back("Test");
}
или чуть более эффективно:
std::vector<std::vector<CString>> tableData(oTA.rows,std::vector<CString>(oTA.cols));
for(int r = 0; r < oTA.rows; r++)
for(int c = 0; c < oTA.cols; c++)
tableData[r][c]="Test";
Вы не можете инициализировать std::vector
записи с индексированным доступом через []
если вы еще ничего не вставили в вектор или не инициализировали его с размером и заполнением (увидеть vector
конструктор). Так что это вызовет проблемы, когда tableData
пусто и oTA.rows
или же oTA.cols
являются 0
,
for(int r = 0; r < oTA.rows; r++)
for(int c = 0; c < oTA.cols; c++)
tableData[r][c] = "Test";
Вы должны использовать vector::push_back()
добавить данные:
for(int r = 0; r < oTA.rows; r++) {
tableData.push_back(std::vector<CString>());
for(int c = 0; c < oTA.cols; c++) {
tableData.back().push_back("Test");
}
}
Вы не можете просто получить доступ к std :: vector без предварительного добавления элементов. Либо используйте std :: vector :: push_back (), либо используйте конструктор Cplusplus.com