gpt4 book ai didi

c++ - 如何访问 C++ 中链表中的对象

转载 作者:太空狗 更新时间:2023-10-29 23:42:00 24 4
gpt4 key购买 nike

我非常习惯使用数组和 vector ,但现在我正在玩一些 STD::lists,以及我制作的自定义列表类。

假设我有一个简单的类 Stock。

//stock.h
class Stock{
public:
Stock(); //default constructor
Stock(string, double); //overloaded constructor
void setSymbol(string); //sets stock symbol
void setPrice(double);
string getSymbol();
double getPrice();
private:
string symbol;
double price;
};

现在在一个单独的文件中我要测试我的 int main。

#include "stock.h"
#include <list>

int main(){
list<Stock> portfolio;

Stock Google("GOOG", 500);
Stock Apple("APPL", 300);
Stock Chipotle("CMG", 200);

portfolio.push_back(Google);
portfolio.push_back(Apple);
portfolio.push_back(Chipotle);
}

现在,如果这是一个 vector 或数组,我不会有任何问题,我只是完全迷失在链表等价物上:

for(int i=0; i <portfolio.size(); i++){
portfolio[i].getSymbol();
portfolio[i].getPrice();
}

或者类似的东西...我没有接受过链接列表方面的讲座/培训,所以我真的在尽我最大的努力自学——但我坚持基本操作。我现在正在使用 STL::list,但实际上也在尝试制作我自己的类(class)。

最佳答案

for(int i= portfolio.begin(); i <portfolio.size(); i++)

如果这对 std::vector 有效,那只是纯属偶然。我不知道这对 vector 有何影响。

std::any_STL_container::begin() 返回一个称为“迭代器”的对象。具体来说,是 std::any_STL_container::iterator 类型的对象。迭代器有点像通用指针:它引用 STL 容器中的元素。

begin 返回的迭代器是引用列表中第一个元素的迭代器。您可以像指针一样移动迭代器。例如:

std::list<Stock> portfolio;
...
std::list<Stock>::iterator currElem = portfolio.begin();
++currElem; //Now points to the second element in the list.
Stock &secondStock = *currElem;

为了遍历列表中的所有元素,您需要两个迭代器:第一个迭代器,以及列表中最后一个元素之后元素的迭代器。幸运的是,这是由 std::any_STL_container::end() 函数返回的。所以,你的循环应该是这样的:

typedef std::list<Stock>::iterator StockIt;
for(StockIt i = portfolio.begin(); i != portfolio.end(); ++i) /* Prefer pre-increment with iterators */
{
i->getSymbol();
i->getPrice();
}

这适用于 任何 常用的 STL 容器。

关于c++ - 如何访问 C++ 中链表中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6561567/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com