C++ programming using lists


 
Thread Tools Search this Thread
Top Forums Programming C++ programming using lists
# 1  
Old 04-01-2009
C++ programming using lists

To test this program it must create 2 integer lists - list1, list2 - and then read and process a series of list commands from a file named "data.txt". Each command and any associated values, list number, value appears on a separate line. All I can do is get it to input the integers and then output them back out on the screen the same as they were in the .txt file. Any help is appreciated.

Code:
 
#include <iostream>
#include <fstream>
#include "List.h"
using namespace std;
int to;
int current;
int from;
int node;
int main()
{
    int x;
    ifstream inFile ("data.txt");
    if(!inFile)
    {
        cout << "oops" << endl;
        exit (1);
    }
    inFile >> x;
    while(!inFile.eof())
    {
        cout << x << endl;
        inFile >> x;
    }
    inFile.close();
    return 0;
}
template <typename Object>
class List
{
    private:
    struct Node
    {
        Object  data;
        Node   *prev;
        Node   *next;
        Node( const Object & d = Object( ), Node *p = NULL, Node *n = NULL )
          : data( d ), prev( p ), next( n ) { }
    };
        public:
        class const_iterator
        {
            public:
        const_iterator( ) : current( NULL )
          { }
        const Object & operator* ( ) const
          { return retrieve( ); }
        const_iterator & operator++ ( )
        {
            current = current->next;
            return *this;
        }
        const_iterator operator++ ( int )
        {
            const_iterator old = *this;
            ++( *this );
            return old;
        }
        bool operator== ( const const_iterator & rhs ) const
          { return current == rhs.current; }
        bool operator!= ( const const_iterator & rhs ) const
          { return !( *this == rhs ); }
      protected:
        Node *current;
        Object & retrieve( ) const
          { return current->data; }
        const_iterator( Node *p ) : current( p )
          { }
        friend class List<Object>;
        };
        class iterator : public const_iterator
        {
      public:
        iterator( )
          { }
       // Object & operator* ( )
        //  { return retrieve( ); }
       // const Object & operator* ( ) const
         // { return const_iterator::operator*( ); }
       // iterator & operator++ ( )
        //{
        //    current = current->next;
        //    return *this;
       // }
        iterator operator++ ( int )
        {
            iterator old = *this;
            ++( *this );
            return old;
        }
      protected:
        iterator( Node *p ) : const_iterator( p )
          { }
        friend class List<Object>;
        };
    public:
    List( )
      { init( ); }
    ~List( )
    {
        clear( );
        delete head;
        delete tail;
    }
    List( const List & rhs )
    {
        init( );
        *this = rhs;
    }
    const List & operator= ( const List & rhs )
    {
        if( this == &rhs )
            return *this;
        clear( );
        for( const_iterator itr = rhs.begin( ); itr != rhs.end( ); ++itr )
            push_back( *itr );
        return *this;
    }
    iterator begin()
    { return iterator( head->next ); }
    iterator end()
    {return iterator( tail ); }
    const_iterator end() const
    {return const_iterator( tail); }
    int size() const
    { return theSize; }
    bool empty() const
    {return size() == 0; }
    void clear()
    {
        while( !empty())
        pop_front();
    }
//3.12
Object & front( )
      { return *begin( ); }
    const Object & front( ) const
      { return *begin( ); }
    Object & back( )
      { return *--end( ); }
    const Object & back( ) const
      { return *--end( ); }
    void push_front( const Object & x )
      { insert( begin( ), x ); }
    void push_back( const Object & x )
      { insert( end( ), x ); }
    void pop_front( )
      { erase( begin( ) ); }
    void pop_back( )
      { erase( --end( ) ); }
    // Insert x before itr.
    iterator insert( iterator itr, const Object & x )
    {
        Node *p = itr.current;
        theSize++;
        return iterator( p->prev = p->prev->next = new Node( x, p->prev, p ) );
    }
    // Erase item at itr.
    iterator erase( iterator itr )
    {
        Node *p = itr.current;
        iterator retVal( p->next );
        p->prev->next = p->next;
        p->next->prev = p->prev;
        delete p;
        theSize--;
        return retVal;
    }
    iterator erase( iterator start, iterator end )
    {
        for( iterator itr = from; itr != to; )
            itr = erase( itr );
        return to;
    }
  private:
    int   theSize;
    Node *head;
    Node *tail;
    void init( )
    {
        theSize = 0;
        head = new Node;
        tail = new Node;
        head->next = tail;
        tail->prev = head;
    }
};


Last edited by vino; 04-02-2009 at 01:27 AM.. Reason: added code tags
# 2  
Old 04-01-2009
code tags for code. they make it readable, as this is not. [ code ] stuff [ /code ] without the extra spaces in the tags.

Also, the contents of List.h are needed.
# 3  
Old 04-03-2009
I am sorry about that I posted the wrong file. Here is the one I wanted you to look at.

this is the main

#include <iostream>
#include <fstream>
#include "List.h"

using namespace std;

int to;
int current;
int from;
int node;
int main()
{
int x;
ifstream inFile ("data.txt");
if(!inFile)
{
cout << "oops" << endl;
exit (1);
}
inFile >> x;
while(!inFile.eof())
{
cout << x << endl;
inFile >> x;
}
inFile.close();
return 0;
}


this is the List.h file

#ifndef LIST_H
#define LIST_H

#include <stdlib.h>
#include <iostream>

#endif

using namespace std;
template <typename Object>

class List
{
private:

// The basic doubly linked list node.
// Nested inside of List, can be public
// because the Node is itself private

struct Node
{
Object data;
Node *prev;
Node *next;
Node( const Object & d = Object( ), Node * p = NULL, Node * n = NULL )
: data( d ), prev( p ), next( n ) { }
};

public:

class const_iterator
{
public:

// Public constructor for const_iterator.

const_iterator( ) : current( NULL )
{ }

// Return the object stored at the current position.
// For const_iterator, this is an accessor with a
// const reference return type.

const Object & operator* ( ) const
{ return retrieve( ); }

const_iterator & operator++ ( )
{
current = current->next;
return *this;
}

const_iterator operator++ ( int )
{
const_iterator old = *this;
++( *this );
return old;
}

const_iterator & operator-- ( )
{
current = current->prev;
return *this;
}

const_iterator operator-- ( int )
{
const_iterator old = *this;
--( *this );
return old;
}

bool operator== ( const const_iterator & rhs ) const
{ return current == rhs.current; }

bool operator!= ( const const_iterator & rhs ) const
{ return !( *this == rhs ); }

protected:
Node *current;

// Protected helper in const_iterator that returns the object
// stored at the current position. Can be called by all
// three versions of operator* without any type conversions.

Object & retrieve( ) const
{ return current->data; }

// Protected constructor for const_iterator.
// Expects a pointer that represents the current position.

const_iterator( Node *p ) : current( p )
{ }
friend class List<Object>;
};

class iterator : public const_iterator
{
public:

// Public constructor for iterator.
// Calls the base-class constructor.
// Must be provided because the private constructor
// is written; otherwise zero-parameter constructor
// would be disabled.

iterator( )
{ }
Object & operator* ( )
{ return this->retrieve( ); }

// Return the object stored at the current position.
// For iterator, there is an accessor with a
// const reference return type and a mutator with
// a reference return type. The accessor is shown first.

const Object & operator* ( ) const
{ return const_iterator:Smilieperator*( ); }

iterator & operator++ ( )
{
this->current = this->current->next;
return *this;
}

iterator operator++ ( int )
{
iterator old = *this;
++( *this );
return old;
}

iterator & operator-- ( )
{
this->current = this->current->prev;
return *this;
}

iterator operator-- ( int )
{
iterator old = *this;
--( *this );
return old;
}

protected:

// Protected constructor for iterator.
// Expects the current position.

iterator( Node *p ) : const_iterator( p )
{ }
friend class List<Object>;
};

public:

List( )
{ init( ); }

~List( )
{
clear( );
delete head;
delete tail;
}

List( const List & rhs )
{
init( );
*this = rhs;
}

const List & operator= ( const List & rhs )
{
if( this == &rhs )
return *this;
clear( );
for( const_iterator itr = rhs.begin( ); itr != rhs.end( ); ++itr )
push_back( *itr );
return *this;
}

// Return iterator representing beginning of list.
// Mutator version is first, then accessor version.

iterator begin( )
{ return iterator( head->next ); }
const_iterator begin( ) const
{ return const_iterator( head->next ); }

// Return iterator representing endmarker of list.
// Mutator version is first, then accessor version.

iterator end( )
{ return iterator( tail ); }

const_iterator end( ) const
{ return const_iterator( tail ); }

// Return number of elements currently in the list.

int size( ) const
{ return theSize; }

// Return true if the list is empty, false otherwise.

bool empty( ) const
{ return size( ) == 0; }

void clear( )
{
while( !empty( ) )
pop_front( );
}

// front, back, push_front, push_back, pop_front, and pop_back
// are the basic double-ended queue operations.

Object & front( )
{ return *begin( ); }

const Object & front( ) const
{ return *begin( ); }

Object & back( )
{ return *--end( ); }

const Object & back( ) const
{ return *--end( ); }

void push_front( const Object & x )
{ insert( begin( ), x ); }

void push_back( const Object & x )
{ insert( end( ), x ); }

void pop_front( )
{ erase( begin( ) ); }

void pop_back( )
{ erase( --end( ) ); }

// Insert x before itr.

iterator insert( iterator itr, const Object & x )
{
Node *p = itr.current;
theSize++;
return iterator( p->prev = p->prev->next = new Node( x, p->prev, p ) );
}

// Erase item at itr.

iterator erase( iterator itr )
{
Node *p = itr.current;
iterator retVal( p->next );
p->prev->next = p->next;
p->next->prev = p->prev;
delete p;
theSize--;
return retVal;
}

iterator erase( iterator start, iterator end )
{
for( iterator itr = start; itr != end; )
itr = erase( itr );
return end;
}

//************************************* New functionality *************************************
// Insert new item in order

void insert_inorder( const Object & x )
{
for( const_iterator itr = this->begin( ); itr != this->end( ); itr++ )
{
if (itr.retrieve() = x)
cout << *itr << " ";
}
cout << endl;
}

// Remove items in rhs and add to this list (in order?)

void merge(List & rhs)
{
//
}

// Reverse the order of items
void reverse()
{
//
}

// Print all of the items in the list
void print()
{
cout << "The list contains the following items:\n";
for( const_iterator itr = this->begin( ); itr != this->end( ); itr++ )
{
cout << *itr << " ";
}
cout << endl;
}

// Print a single item in the list

void print(int x)
{
const_iterator itr = this->begin();
cout << "Item " << x << " contains the following data: ";
for( int i = 1; i <= x; i++ )
{
itr++;
if (i == x)
cout << *itr << " ";
}
cout << endl;
}

// Sort in ascending order
void sort()
{
//
}

// Remove all occurrences of the object
void removeAll(const Object & x)
{
//
}

// Count the number of occurrences of a (value?)
void countOcc(const Object & x)
{
//
}

private:
int theSize;
Node *head;
Node *tail;
void init( )
{
theSize = 0;
head = new Node;
tail = new Node;
head->next = tail;
tail->prev = head;
}
};

Last edited by tiger13e; 04-03-2009 at 11:31 AM..
# 4  
Old 04-03-2009
I need help with these parts.

// Remove items in rhs and add to this list (in order?)
void merge(List & rhs)
{
//
}

// Reverse the order of items
void reverse()
{
//
}

// Sort in ascending order
void sort()
{
//
}

// Remove all occurrences of the object
void removeAll(const Object & x)
{
//
}

// Count the number of occurrences of a (value?)
void countOcc(const Object & x)
{
//
}
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Combining lists

Hello everybody. My operating system is Fedora30, shell - bash I faced combining lists. I will be glad for help regarding strings, arrays and so on. The bottom line is as follows. It is necessary to combine each element from the first list with elements from the second. if the second is longer... (4 Replies)
Discussion started by: nezabudka
4 Replies

2. Shell Programming and Scripting

Issue with Lists

Hey guys, so I wrote this simple script. The first time I typed it all out, I had the issue where whatever choice I entered, it would simply tell me it was a "bad selection" aka the else output. I redid everything, and now no matter the choice, it does the backup option.. My brain hurts, and... (12 Replies)
Discussion started by: jakelawson44
12 Replies

3. UNIX for Dummies Questions & Answers

Lists in awk

Hi togehter! I would like to write an awk script which prints the first column divided by the sum of the second column: So if this is my list 1 2 2 1 3 1 4 1 it should print a list like this: 1/5 2/5 3/5 4/5 My idea was to use END like this: (3 Replies)
Discussion started by: bjoern456
3 Replies

4. UNIX for Dummies Questions & Answers

From iOS programming to Linux system programming

Hello. I like Linux and C programming language. Allways wanted to understand kernel and become a Linux system programmer. And I also like Objective-C and iOS. These two programming areas have relations: 1. Linux and iOS are UNIX-like systems, POSIX compliant. 2. It is useful to know C language... (2 Replies)
Discussion started by: Rockatansky
2 Replies

5. Shell Programming and Scripting

get the lists

I expert, I may cross post something similar but I dirtyed my quesion somehow to be clear in the thread #cat file1 88dee gcc: Grok for callconvention-hard to enable hard float a2ad2 eglibc: package mtrace separately 61487 python: bump PR of packages after update of distutils.bbclass... (1 Reply)
Discussion started by: yanglei_fage
1 Replies

6. Shell Programming and Scripting

combining two lists

Hi, So I I received two lists for my merchandise and both are similar but differences do occur. I want to combine two lists that have similar names but I dont want the similar name to come up twice because I will end up purchasing two of those items. Heres an example below (file is massive). ... (1 Reply)
Discussion started by: kylle345
1 Replies

7. Shell Programming and Scripting

Shell Script to Create non-duplicate lists from two lists

File_A contains Strings: a b c d File_B contains Strings: a c z Need to have script written in either sh or ksh. Derive resultant files (File_New_A and File_New_B) from lists File_A and File_B where string elements in File_New_A and File_New_B are listed below. Resultant... (7 Replies)
Discussion started by: mlv_99
7 Replies

8. UNIX for Dummies Questions & Answers

Carreer:Networking Programming in Unix (C programming Language)

Hello, I am trying to learn Networking Programming in C in unix enviorment. I want to know how good it is to become a network programmer. i am crazy about Network programming but i also want to opt for the best carreer options. Anybody experienced Network Programmer, please tell me is my... (5 Replies)
Discussion started by: vibhory2j
5 Replies

9. Shell Programming and Scripting

Question on lists

I'm fairly new to shell scripting and would like to know if what I am seeking to do is possible in shell. I'm trying to make a list of strings. The list will be looped through and each member of the list will be used to pass a parsing option to python. My script looks something like this: ... (3 Replies)
Discussion started by: Nacre
3 Replies

10. Shell Programming and Scripting

Check lists for Unix Shell Programming

Hi all, Can anyone provide me any checklists or a list of steps I should follow before executing my scripts. Could also tell me if there are any other standards to be followed while shell programming like naming conventions for variables etc. Your help would be much appreciated. Regards,... (2 Replies)
Discussion started by: srikanth_ksv
2 Replies
Login or Register to Ask a Question