c ++:通过索引从列表中获取对象不起作用?

时间:2014-01-21 12:37:32

标签: c++ list class oop object

我是c ++的新手,最近我尝试了以下内容:

list<Someclass> listofobjects;
int Index;
cin >> Index;
Someclass anobject = listofobjects[Index];

作为输出,我收到以下错误:

../src/Kasse.h:98:71: error: no match for ‘operator[]’ in ‘((Someclass*)this)->Someclass::listofobjects[((Someclass*)this)->Someclass::Index]’

有谁知道为什么?我只是找不到解决方案...... 提前致谢

1 个答案:

答案 0 :(得分:2)

std::list是一个双向链表 - 它允许您从开头或结尾迭代它,但不允许随机访问特定索引。

如果你想要,也许你想要一个像std::vector这样的随机访问容器,一个动态数组。你需要确保它足够大以包含你需要的索引:

if (Index >= listofobjects.size()) {
    listofobjects.resize(Index+1);
}

如果你想修改它,你可能想要引用列表中的对象,而不是副本:

Someclass & anobject = listofobjects[Index];

或者,如果您想要一个仅包含实际使用的索引的对象的稀疏数组,则可以使用关联映射:

std::map<int, Someclass> objects;
Someclass & anobject = objects[Index];