1

ヒープ上で 2 次元ベクトルを宣言する

最初のアプローチ:

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;

2 番目のアプローチ:

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;

どのアプローチが適切ですか?2次元ベクトルを削除するには?

4

3 に答える 3

1

削除に関しては、最初のアプローチの方が優れているはずです。これは、各要素が参照されるだけであるため、参照を破棄するとオブジェクトが破棄されるためです。

于 2013-09-13T17:08:58.960 に答える
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");
    }
}
于 2013-09-13T17:28:04.390 に答える