C++ C++;-重载对象指针列表的[]运算符
我把它作为班级任务的一员C++ C++;-重载对象指针列表的[]运算符,c++,list,pointers,visual-c++,C++,List,Pointers,Visual C++,我把它作为班级任务的一员 list<Stimulation*> listOfStimulations; 刺激列表; 以及我班上其他同学的定义 class Task { public: Task(); Task(const Task& obj); Task(const Task&& obj); Task(string, list<Stimulation*>); Task& operator+=( S
list<Stimulation*> listOfStimulations;
刺激列表;
以及我班上其他同学的定义
class Task
{
public:
Task();
Task(const Task& obj);
Task(const Task&& obj);
Task(string, list<Stimulation*>);
Task& operator+=( Stimulation* obj);
Stimulation* Task::operator[](int i) const;
};
#endif
类任务
{
公众:
任务();
任务(const任务和obj);
任务(常量任务和对象);
任务(字符串、列表);
任务和操作员+=(刺激*obj);
刺激*任务::运算符[](int i)常量;
};
#恩迪夫
我想成为ale,访问列表中的每个刺激
我知道我应该使用vector,但使用list是必需的
我将如何过载[]
我试过了
Stimulation* Task::operator[](int i) const
{
list<Stimulation*>::const_iterator iter;
iter = listOfStimulations.begin();
advance(iter, i);
return *iter;
}
刺激*任务::运算符[](int i)常量
{
列表::常量迭代器iter;
iter=listofSimulations.begin();
国际热核实验堆(iter,i);
返回*iter;
}
我的主要问题是,这段代码不允许我访问列表中的元素
例如,ListofSimulations[i]不起作用,并且不允许我访问Simulations类中的函数显示 鉴于列表中每个元素的索引/位置,您尚未指定是否需要对其进行随机访问 无论如何,正如molbdnilo所评论的,std::list没有运算符[], 有关原因的说明,请阅读 要访问列表中的项,最好使用迭代器,从开始 已编辑
好的,根据您自己的评论,您需要随机访问每个索引项。
您在该注释中链接的代码看起来是个不错的选择。顺序访问
列表的最佳方法是使用其
我建议使用符合需求的数据结构,而不是仅仅因为需要而尝试使用列表
迭代器就是这样工作的
for (std::list<T>::iterator it = mylist.begin(); it != mylist.end(); ++it)
{
if (...)
{
return *it;
}
}
只需使用begin()
和end()
?您可以使用迭代器遍历列表,直到到达第n个节点。如果它是标准的列表
,则不能<代码>运算符[]
必须是非静态成员函数。std::list
的要求表明此练习想教您如何在不依赖索引的情况下编程。@molbdnilo很抱歉,此练习确实指定要重载[]运算符。@felix我已经尝试过了,我不完全确定它是否符合我的要求。我希望能够执行listofsimulation[I]->display()来调用对象的display函数。您好,本质上我希望获取我的列表并访问方括号内的每个元素。我知道原因,我应该使用向量。不幸的是,这是一项要求。我试过了,但它没有达到我想要的效果。ListofSimulations[i]->display()唯一的问题是,我似乎无法使用列表访问其中的每个对象指针,这让我相信我的声明做了一些错误。如果没有完整但基本的源代码,很难理解您真正在做什么以及需要什么来帮助您。我建议您编辑您的问题,并在其中添加最少的源代码(内联,而不是StackOverflow之外的链接页面)。在您链接的代码中,您正在重载名为Task(not)的类的运算符[]。该类在代码片段的任何地方都没有定义。事实上,请查看问题是,这会重载我列表的[]还是仅重载我的实际对象。好的,我已经更新了我的代码(请参阅main post)。我仍然无法访问每个刺激的显示功能。请尝试使用std::advance(it,5);std::advance(it,5);的结果与mylist[5]的结果相同。没错,但它仍然不允许我访问列表中对象的成员。(例如,列表中的每个对象都有显示功能).我需要在for
循环中调用无条件return
?
std::list<T>::iterator it = mylist.begin();
std::advance(it,5);
return *it