假设我使用的是非标准的链表类List.h
.这个类正在运行,模板化,并具有添加/删除到前面和添加/删除到后面,isEmpty()等的典型功能.
此列表没有任何begin()和end()功能.此外,链表类必须包含迭代器功能吗?或者,当我创建一个新列表时,我可以自己创建这些东西吗?
我习惯使用STL,所以我通常会使用这段代码:
typedef vector<OBJECT>::iterator QuoteIt;
for(QuoteIt i = deposits.begin(); i != deposits.end(); ++i)
Run Code Online (Sandbox Code Playgroud)
无论如何,让我说我创建一个新的"列表".
List<int>deposits;
Run Code Online (Sandbox Code Playgroud)
甚至是对象列表
List<OBJECT>deposits;
Run Code Online (Sandbox Code Playgroud)
因此,假设我有addToBack()
20个不同的整数,因此可以创建适当的新节点数.
现在,我如何遍历此列表,以便找到所有这些整数的总和?这可能,或者我目前的功能是否可以阻止这种情况?我必须在List类中实现某种迭代器吗?
现在我知道我可以保留一个外部变量,每次我addToBack()
打电话跟踪我的总和.但是,我希望代码也与对象列表兼容.(我希望能够在节点中搜索一个值,并最终在同一节点中检索另一个值)
我已经习惯于使用stl::list
迭代器来创建一个for循环,我真的不知道如何使用其他类.
顺便说一下这里是代码List()
:
template<class NODETYPE>
class List{
public:
List();
~List();
void insertAtFront(const NODETYPE &);
void insertAtBack(const NODETYPE &);
bool removeFromFront( NODETYPE &);
bool removeFromBack( NODETYPE &);
bool isEmpty() const;
private:
ListNode< NODETYPE > *firstPtr; //pointer to first node
ListNode< NODETYPE > *lastPtr;
//Function to allocate a new node
ListNode< NODETYPE …
Run Code Online (Sandbox Code Playgroud) 我非常习惯使用数组和向量,但现在我正在玩一些STD :: list,以及我制作的自定义列表类.
假设我有一个简单的类,股票.
//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;
};
Run Code Online (Sandbox Code Playgroud)
现在在一个单独的文件中,我有我的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);
}
Run Code Online (Sandbox Code Playgroud)
现在,如果这是一个向量或数组,我没有问题,我只是完全失去了相当于以下的链表:
for(int i=0; i <portfolio.size(); i++){
portfolio[i].getSymbol();
portfolio[i].getPrice();
}
Run Code Online (Sandbox Code Playgroud)
或者类似的东西......我没有关于链接列表的讲座/培训,所以我真的想尽力自学 - 但我仍然坚持基本操作.我现在正在使用STL :: list,但是我也在努力创建自己的类.
有一个作业,我应该在其中创建指向对象的指针的向量
稍后,我将使用继承/多态性来扩展类,以包括两天交付,第二天空运等费用。但是,现在我不在乎。当前程序的最终目标是仅打印出矢量中每个对象的内容(名称和地址)并找到其运输成本(重量*成本)。
我的麻烦与逻辑不符,我只是对与对象/指针/向量有关的几点感到困惑。但是首先我的代码。我基本上删去了目前不重要的所有内容,int main将具有用户输入,但是现在我硬编码了两个示例。
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Package {
public:
Package(); //default constructor
Package(string d_name, string d_add, string d_zip, string d_city, string d_state, double c, double w);
double calculateCost(double, double);
~Package();
private:
string dest_name;
string dest_address;
string dest_zip;
string dest_city;
string dest_state;
double weight;
double cost;
};
Package::Package()
{
cout<<"Constucting Package Object with default values: "<<endl;
string dest_name="";
string dest_address="";
string dest_zip="";
string dest_city="";
string dest_state="";
double weight=0;
double cost=0;
}
Package::Package(string d_name, …
Run Code Online (Sandbox Code Playgroud) #include<iostream>
#include<vector>
#include<fstream>
#include "stock.h"
int main(){
double balance =0, tempPrice=0;
string tempStr;
vector < Stock > portfolio;
typedef vector<Stock>::iterator StockIt;
ifstream fileIn( "Results.txt" );
for(StockIt i = portfolio.begin(); i != portfolio.end(); i++)
{
while ( !fileIn.eof( ))
{
getline(fileIn,tempStr);
i->setSymbol(tempStr);
fileIn >> tempPrice;
i->setPrice(tempPrice);
getline(fileIn,tempStr);
i->setDate(tempStr);
}
fileIn.close();
}
for(StockIt i = portfolio.begin(); i != portfolio.end(); i++){
cout<<i->getSymbol() <<endl;
cout<<i->getPrice() <<endl;
cout<<i->getDate() <<endl;
}
return 0;
Run Code Online (Sandbox Code Playgroud)
}
示例文本文件Results.txt:
GOOG 569.964 11/17/2010
MSFT 29.62 11/17/2010
YHOO 15.38 11/17/2010
AAPL 199.92 …
Run Code Online (Sandbox Code Playgroud)