利用vector与class完成的链表排序操作demo

本文详细阐述了链表操作中的初始化、数据获取、插入、排序等关键步骤,并通过实例展示了如何利用C++实现链表的排序功能。通过定义一个自定义类`ListClass`,实现了链表的基本操作,并通过`initData`方法初始化链表数据,进而通过`getVector`方法获取链表内容。最后,通过遍历链表并比较元素值,实现了链表元素的排序。

//ListClass.h #pragma once class ListClass { public: ListClass(void); ListClass(int var,string name); virtual ~ListClass(void); int getVar(void); void setVar(int var); string getVarName(void); void initData(); vector<ListClass> getVector(); protected: int m_var; string m_name; vector<ListClass> lcvec; const static int MAX = 100; }; //ListClass.cpp #include "StdAfx.h" #include "ListClass.h" ListClass::ListClass(void) : m_var(0),m_name(string("")) { } ListClass::ListClass(int var,string name) : m_var(var),m_name(name) { } ListClass::~ListClass(void) { } int ListClass::getVar(void) { return this->m_var; } string ListClass::getVarName(void) { return this->m_name; } vector<ListClass> ListClass::getVector(){ return this->lcvec; } void ListClass::initData(){ int userid = 0; string username = ""; ListClass listclass[ListClass::MAX]; int i = 0; while(i < ListClass::MAX){ cout << "Enter your userid when userid = '0' will go down :" << endl; cin >> userid; if (userid != 0) { cout << "Enter your username:" << endl; cin >>username; listclass[i] = ListClass(userid,username); this->lcvec.push_back(listclass[i]); } else{ break; } i++; } } void ListClass::setVar(int var) { this->m_var = var; //return 0; } // stdafx.h : include file for standard system include files, // or project specific include files that are used frequently, but // are changed infrequently // #pragma once #include "targetver.h" #include <stdio.h> #include <tchar.h> #include <iostream> #include <string> #include <vector> #include <iterator> #include <algorithm> using namespace std; // TODO: reference additional headers your program requires here // class_verctor.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "ListClass.h" int _tmain(int argc, _TCHAR* argv[]) { /* ListClass lc[3]; lc[0] = ListClass(12,"this is my name"); lc[1] = ListClass(2,"hello"); lc[2] = ListClass(3,"yeah"); int versize; cout<< "______________________________________" <<endl; vector<ListClass> lcvec; for (int i = 0; i < versize; i++){ lcvec.push_back(lc[i]); } */ ListClass lc; lc.initData(); vector<ListClass> lcvec = lc.getVector(); vector<ListClass>::iterator lcit = lcvec.begin(); vector<int> nvar(0); while(lcit != lcvec.end()){ cout << "running :nvar.push_back((*lcit).getVar())" << endl; nvar.push_back((*lcit).getVar()); lcit++; } cout<< "______________________________________" <<endl; vector<int>::iterator nitbegin = nvar.begin(); vector<int>::iterator nitend = nvar.end(); vector<int> newnvar(nitbegin,nitend); sort(nitbegin,nitend); while(nitbegin != nvar.end()){ cout << "var for nvar vector:" << (*nitbegin) << endl; nitbegin++; } nitbegin = newnvar.begin(); while(nitbegin != newnvar.end()){ cout << "var for newnvar vector:" << (*nitbegin) << endl; nitbegin++; } cout<< "______________________________________" <<endl; /* nitbegin = nvar.begin();//int vector while(nitbegin != nvar.end()){ cout << "(*lcit).getVar() :" << (*lcit).getVar() << endl; cout << "*nitbegin :" << (*nitbegin) << endl; lcit = lcvec.begin();//list vector while(lcit != lcvec.end()){ if ((*nitbegin) == (*lcit).getVar()){ cout << "string name is " << (*lcit).getVarName() << endl; } lcit++; } nitbegin++; } */ //用nvar中的一个元素与lcvec中的每一个元素对比 nitbegin = nvar.begin(); while(nitbegin != nvar.end()){ cout << "var for nvar vector:" << (*nitbegin) << endl; for (lcit = lcvec.begin(); lcit != lcvec.end();++lcit){ if ((*lcit).getVar() == (*nitbegin)){ cout << "(*lcit).getVar() ,(*nitbegin) and string name is " << (*lcit).getVar() << "|||||" << (*nitbegin) << "|||||"<< (*lcit).getVarName() << endl; } } nitbegin++; } /*for edition*/ //用nvar中的一个元素与lcvec中的每一个元素对比 /* for (nitbegin = nvar.begin(); nitbegin != nvar.end(); ++nitbegin){ for (lcit = lcvec.begin(); lcit != lcvec.end();++lcit){ if ((*lcit).getVar() == (*nitbegin)){ cout << "(*lcit).getVar() ,(*nitbegin) and string name is " << (*lcit).getVar() << "|||||" << (*nitbegin) << "|||||"<< (*lcit).getVarName() << endl; } } } */ return 0; }

执行结果:

 

分析:

首先使用initData函数讲数据初始化,并给vector变量lcvec进行push_back操作,将每一个ListClass对象都加入到其中。在利用getVector方法得到这个容器。再定义一个int型的vector来存之前ListClass vector容器中每一个对象的getVar的整数值,再利用sort方法将这个int型vector中的元素排序,排序好了就用这个排好序的vector作为模子,来对比每一个ListClass vector中的getVar的值,当相等时久讲对应的getVarName打印出来。如此就基本上模拟了链表操作中的排序操作。

转载于:https://www.cnblogs.com/Podevor/archive/2011/06/28/2788091.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值