小编Sta*_*uft的帖子

在C++中遍历非STL链表可能吗?

假设我使用的是非标准的链表类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)

c++ linked-list

3
推荐指数
1
解决办法
384
查看次数

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

我非常习惯使用数组和向量,但现在我正在玩一些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,但是我也在努力创建自己的类.

c++ linked-list object

2
推荐指数
1
解决办法
4562
查看次数

对象指针,一般帮助和混乱的载体

有一个作业,我应该在其中创建指向对象的指针的向量

稍后,我将使用继承/多态性来扩展类,以包括两天交付,第二天空运等费用。但是,现在我不在乎。当前程序的最终目标是仅打印出矢量中每个对象的内容(名称和地址)并找到其运输成本(重量*成本)。

我的麻烦与逻辑不符,我只是对与对象/指针/向量有关的几点感到困惑。但是首先我的代码。我基本上删去了目前不重要的所有内容,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)

c++ pointers vector object

1
推荐指数
1
解决办法
1万
查看次数

从.txt文件初始化对象向量

#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)

c++ file-io object data-structures

0
推荐指数
1
解决办法
1502
查看次数

标签 统计

c++ ×4

object ×3

linked-list ×2

data-structures ×1

file-io ×1

pointers ×1

vector ×1