使用矢量矢量我有点问题。
我班上有一个AObject *object = new Letters();
_word.push_back(object);
,我建立了自己的信息:
for (size_t i = 0 ; i < _word.size() ; ++i)
_word[i]->draw();
后来我用了:
std::vector<std::vector<AObject*> > _words;
^这项工作,但我需要另外一次实施
但我需要这样使用它:
在我的课堂上:AObject *obj = new Letters();
_word.push_back(obj);
_words.push_back(_word);
for (size_t i = 0 ; i < _words.size() ; ++i)
_words[0][i]->draw();
但是我的内存损坏......
所以我不能这样使用矢量矢量:
for (size_t i = 0; i < _words.size() ; ++i)
{
for (size_t j = 0 ; j < _word.size() ; ++j)
_words[i][j]->draw();
}
谢谢!
修改
我试过了:
albumsApp.controller ('albumController', function ($scope,albumFactory) {
albumFactory.getAlbumsAsync(function(results){
console.log('albumController async returned value');
$scope.albums = results.albums;
});
$scope.changeSorting = function (){
// your logic goes here
console.log('changeSorting called');
});
});
答案 0 :(得分:1)
您在下面的块中错误地使用了索引:
for (size_t i = 0 ; i < _words.size() ; ++i)
_words[0][i]->draw();
它应该是:
for (size_t i = 0 ; i < _words.size() ; ++i)
_words[i][0]->draw();
// ^^^^ reverse i and 0
答案 1 :(得分:1)
你有一个嵌套在矢量内的矢量。请注意术语嵌套。这意味着您需要某种嵌套循环来访问最内层的向量。
我们有一个简单的例子:
std::vector<std::vector<AObject*>> vect;
//...
std::vector<AObject*> inner = {new AObject, new AObject, new AObject};
//...
vect.push_back(inner);
vect.push_back(inner);
vect.push_back(inner);
vect.push_back(inner);
因此vect
中有4个项目,所有这些项目都是std::vector<AObject*>
,其中每个项目都有3个项目。
现在我们这样做了:
vect.size()
返回值为4,因为这是“外部”向量中的项目数。
现在,如果我们像你一样写一个循环:
for (size_t i = 0 ; i < vect.size() ; ++i)
vect[0][i]->draw();
您正在循环访问(如果我们展开它):
vect[0][0]->draw(); // good
vect[0][1]->draw(); // good
vect[0][2]->draw(); // good
vect[0][3]->draw(); // <-- error
问题在于没有vect[0][3]
。内部向量中只有3个项目,而不是4个项目。您正在访问超出范围的内存。
所以你的指数不正确。你想做的是:
vect[0][0]->draw(); // good
vect[0][1]->draw(); // good
vect[0][2]->draw(); // good
vect[1][0]->draw(); // good
vect[1][1]->draw(); // good
vect[1][2]->draw(); // good
vect[2][0]->draw(); // good
vect[2][1]->draw(); // good
vect[2][2]->draw(); // good
vect[3][0]->draw(); // good
vect[3][1]->draw(); // good
vect[3][2]->draw(); // good
所以循环应该是这样的:
for (size_t i = 0 ; i < vect.size() ; ++i)
{
size_t innerSize = vect[i].size();
for (size_t j = 0; j < innerSize; ++j )
vect[i][j]->draw();
}