我正在尝试创建一个CStrings矢量矢量; CStrings的二维数组。这将表示表中的数据。 (当然所有数据都是CString)。
以下是我尝试初始化Vector>
的方法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!
}
}
但我认为我没有正确地初始化它。我不断得到一个向量超出界限的错误。
答案 0 :(得分:2)
这是因为您需要在访问它们之前分配内存并构造矢量元素。这应该有效:
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";
答案 1 :(得分:1)
如果您尚未将任何内容推送到向量中或使用大小和填充(see vector
's constructor)对其进行初始化,则无法通过std::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");
}
}
答案 2 :(得分:0)
如果不先添加项目,就不能简单地访问std :: vector。使用std :: vector :: push_back()或使用构造函数Cplusplus.com