tlist.cpp

Download: tlist.zip

This program demonstrates some of the features of the STL list container object.


#include "stdio.h"
#include <iostream>
#include <string>
#include <list>
using namespace std;


class Label {
public:
	string item;
	Label() { }
	Label(char *name) { item = name; }
	~Label() { printf("Deleting node: %s\n",item.c_str()); }
	void show();
};

list<Label> labels;

#define MAXC 128
char text[MAXC];
void show_list();

void main()
{
	int i,ntag=0;
	Label *np;

	for (i=0; i<6; i++) {
		sprintf_s(text,MAXC-1,"tag %d",++ntag);
		np = new Label(text);
		labels.push_back(*np);
	}
	show_list();

	list<Label>::iterator iter = labels.begin();
	for (i=0; i<3; i++) iter++;
	labels.erase(iter);
	cout << "after labels.erase(iter):\n";
	show_list();
	cout << "after labels.reverse():\n";
	labels.reverse();
	show_list();
}

void Label::show()
{
	cout << item << endl;
}

void show_list()
{
	cout << "start_list (" << labels.size() << " members)" << endl;
	list<Label>::iterator iter;
	for (iter=labels.begin(); iter!=labels.end(); iter++) {
		cout << (*iter).item << endl;	
	}
	cout << "end_list" << endl;
}


Results

start_list (6 members)
tag 1
tag 2
tag 3
tag 4
tag 5
tag 6
end_list
Deleting node: tag 4
after labels.erase(iter):
start_list (5 members)
tag 1
tag 2
tag 3
tag 5
tag 6
end_list
after labels.reverse():
start_list (5 members)
tag 6
tag 5
tag 3
tag 2
tag 1
end_list
Deleting node: tag 6
Deleting node: tag 5
Deleting node: tag 3
Deleting node: tag 2
Deleting node: tag 1

Here is the output with the last three lines of the program (reversing the list) commented out:

start_list (6 members)
tag 1
tag 2
tag 3
tag 4
tag 5
tag 6
end_list
Deleting node: tag 4
after labels.erase(iter):
start_list (5 members)
tag 1
tag 2
tag 3
tag 5
tag 6
end_list
Deleting node: tag 1
Deleting node: tag 2
Deleting node: tag 3
Deleting node: tag 5
Deleting node: tag 6


Maintained by John Loomis, updated Tue Feb 13 13:39:48 2007