c++如何在类中遍历list? 我想在头文件中的类里面实现list集合的添加和遍历功能

c++如何在类中遍历list? 我想在头文件中的类里面实现list集合的添加和遍历功能,第1张

把 类里的迭代器声明去掉,在循环的位置在直接初始化并使用。

迭代器的申明也不对。

迭代器也是个对象,所以跟普通变量的申明一样的。

list<Student>::iterator its = list.begin()

这样就可以了。

List究竟是什么?

List是接口--继承于collection序列(接口)

List是有序的 collection(也称为序列)。该接口的实现类可以对列表中每个元素的插入位置进行精确地控制。

List如何插入元素?

List 接口提供了两种在列表的插入元素的方法。

add(E e)   向列表的尾部添加指定的元素(可选 *** 作)。

add(int index, E element) 在列表的指定位置插入指定元素(可选 *** 作)。

参考实例

以List的实现类ArrayList为例

import java.util.ArrayList

import java.util.List

public class ListDemo {

public static void main(String[] args) {

List<String> list  = new ArrayList<String>()

list.add("学习")//第一种插入方式,插入到序列的尾部

list.add("java")

list.add(0,"我")//第二种插入方式,插入到序列的指定位置。索引从0开始。所以这里就是插入到序列的头部。

System.out.println(list)//输出序列

}

}

输出结果

[我, 学习, java]

#include <iostream>

#include <list>

#include <numeric>

#include <algorithm>

using namespace std

//创建一个list容器的实例LISTINT

typedef list<int>LISTINT

//创建一个list容器的实例LISTCHAR

typedef list<int>LISTCHAR

void main(void)

{

//--------------------------

//用list容器处理整型数据

//--------------------------

//用LISTINT创建一个名为listOne的list对象

LISTINT listOne

//声明i为迭代器

LISTINT::iterator i

//从前面向listOne容器中添加数据

listOne.push_front (2)

listOne.push_front (1)

//从后面向listOne容器中添加数据

listOne.push_back (3)

listOne.push_back (4)

//从前向后显示listOne中的数据

cout<<"listOne.begin()--- listOne.end():"<<endl

for (i = listOne.begin()i != listOne.end()++i)

cout <<*i <<" "

cout <<endl

//从后向后显示listOne中的数据

LISTINT::reverse_iterator ir

cout<<"listOne.rbegin()---listOne.rend():"<<endl

for (ir =listOne.rbegin()ir!=listOne.rend()ir++) {

cout <<*ir <<" "

}

cout <<endl

//使用STL的accumulate(累加)算法

int result = accumulate(listOne.begin(), listOne.end(),0)

cout<<"Sum="<<result<<endl

cout<<"------------------"<<endl

//--------------------------

//用list容器处理字符型数据

//--------------------------

//用LISTCHAR创建一个名为listOne的list对象

LISTCHAR listTwo

//声明i为迭代器

LISTCHAR::iterator j

//从前面向listTwo容器中添加数据

listTwo.push_front ('A')

listTwo.push_front ('B')

//从后面向listTwo容器中添加数据

listTwo.push_back ('x')

listTwo.push_back ('y')

//从前向后显示listTwo中的数据

cout<<"listTwo.begin()---listTwo.end():"<<endl

for (j = listTwo.begin()j != listTwo.end()++j)

cout <<char(*j) <<" "

cout <<endl

//使用STL的max_element算法求listTwo中的最大元素并显示

j=max_element(listTwo.begin(),listTwo.end())

cout <<"The maximum element in listTwo is: "<<char(*j)<<endl

}

#include <iostream>

#include <list>

using namespace std

typedef list<int>INTLIST

//从前向后显示list队列的全部元素

void put_list(INTLIST list, char *name)

{

INTLIST::iterator plist

cout <<"The contents of " <<name <<" : "

for(plist = list.begin()plist != list.end()plist++)

cout <<*plist <<" "

cout<<endl

}

//测试list容器的功能

void main(void)

{

//list1对象初始为空

INTLIST list1

//list2对象最初有10个值为6的元素

INTLIST list2(10,6)

//list3对象最初有3个值为6的元素

INTLIST list3(list2.begin(),--list2.end())

//声明一个名为i的双向迭代器

INTLIST::iterator i

//从前向后显示各list对象的元素

put_list(list1,"list1")

put_list(list2,"list2")

put_list(list3,"list3")

//从list1序列后面添加两个元素

list1.push_back(2)

list1.push_back(4)

cout<<"list1.push_back(2) and list1.push_back(4):"<<endl

put_list(list1,"list1")

//从list1序列前面添加两个元素

list1.push_front(5)

list1.push_front(7)

cout<<"list1.push_front(5) and list1.push_front(7):"<<endl

put_list(list1,"list1")

//在list1序列中间插入数据

list1.insert(++list1.begin(),3,9)

cout<<"list1.insert(list1.begin()+1,3,9):"<<endl

put_list(list1,"list1")

//测试引用类函数

cout<<"list1.front()="<<list1.front()<<endl

cout<<"list1.back()="<<list1.back()<<endl

//从list1序列的前后各移去一个元素

list1.pop_front()

list1.pop_back()

cout<<"list1.pop_front() and list1.pop_back():"<<endl

put_list(list1,"list1")

//清除list1中的第2个元素

list1.erase(++list1.begin())

cout<<"list1.erase(++list1.begin()):"<<endl

put_list(list1,"list1")

//对list2赋值并显示

list2.assign(8,1)

cout<<"list2.assign(8,1):"<<endl

put_list(list2,"list2")

//显示序列的状态信息

cout<<"list1.max_size(): "<<list1.max_size()<<endl

cout<<"list1.size(): "<<list1.size()<<endl

cout<<"list1.empty(): "<<list1.empty()<<endl

//list序列容器的运算

put_list(list1,"list1")

put_list(list3,"list3")

cout<<"list1>list3: "<<(list1>list3)<<endl

cout<<"list1<list3: "<<(list1<list3)<<endl

//对list1容器排序

list1.sort()

put_list(list1,"list1")

//结合处理

list1.splice(++list1.begin(), list3)

put_list(list1,"list1")

put_list(list3,"list3")

}

参考:http://hi.baidu.com/xun1573/blog/item/6b6a2f087ebbe9960b7b8249.html


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11835325.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存