在堆上声明二维向量
第一种方法:
vector< vector<CString> *> * lstTableContent = new vector< vector<CString> *>();
int nNumColumns = 10;
int nNumRows = 10;
for (int i = 1; i <= nNumRows ; i++)
{
vector<CString> *lstTableRow = new vector<CString>();
for (int j = 1; j <= nNumColumns ; j++)
{
lstTableRow->push_back("ITEM");
}
lstTableContent->push_back(lstTableRow);
}
return lstTableContent;
第二种方法:
vector< vector<CString> > * lstTableContent = new vector< vector<CString> >();
int nNumColumns = 10;
int nNumRows = 10;
for (int i = 1; i <= nNumRows ; i++)
{
vector<CString> lstTableRow;
for (int j = 1; j <= nNumColumns ; j++)
{
lstTableRow.push_back("ITEM");
}
lstTableContent->push_back(lstTableRow);
}
return lstTableContent;
哪种方法合适? 如何删除二维向量?
答案 0 :(得分:4)
更好的方法
vector< vector<CString>> lstTableContent;
int nNumColumns = 10;
int nNumRows = 10;
for (int i = 1; i <= nNumRows ; i++)
{
vector<CString> lstTableRow;
for (int j = 1; j <= nNumColumns ; j++)
{
lstTableRow.push_back("ITEM");
}
lstTableContent.push_back(lstTableRow);
}
当lstTableContent超出范围时,所有内容都会被正确解析。
否则,你必须循环遍历向量并在删除向量向量(你的选项1)之前删除各个向量,或者在向量超出范围并删除向量之前循环向量向量(你的选择2)。
答案 1 :(得分:1)
第一种方法在删除时应该更好,因为每个元素都被引用,因此销毁引用会破坏对象。
答案 2 :(得分:1)
// unsigned size type
const unsigned nNumRows = 10;
// unsigned size type
const unsigned nNumColumns = 10;
vector< vector<CString> > v(nNumRows);
// C/C++ starts counting at zero and ++i for good habit:
for (unsigned i = 0; i < nNumRows ; ++i)
{
vector<CString>& col = v[i];
col.reserve(nNumColumns);
// Again: C/C++ starts counting at zero and ++j for good habit:
for (unsigned j = 0; j < nNumColumns ; ++j)
{
col.push_back("ITEM");
}
}