使用过java的小伙伴一定学习过ArrayList这个集合,java给我们提供了丰富的操作,但是C++里只能自己造轮子,因此学习了C++中list的使用,下面分享一些常用的相关操作。
有些操作还未实现,待后期完善。
#include <iostream>
#include <list> // 引入list模块
using namespace std;
// 太多文章都是使用最基本的int类型,使用对象的很少
// 因此本文使用对象的list,这样更符合java的ArrayList操作
// 定义,存放Student对象指针
list<Student*> students;
Student *stu1,*stu2,*stu3;
stu1 = new Student("张三",18,"北京");
stu2 = new Student("李四",23,"上海");
stu3 = new Student("王五",20,"广东");
// 加入list尾部,类似ArrayList的add()操作
students.push_back(stu1);
students.push_back(stu2);
students.push_back(stu3);
//遍历
list<Student*>::iterator i;
for(i=students.begin();i!=students.end();i++){
cout << "StudentName:" << (*i)->getName() << ",StudentAge:" << (*i)->getAge() << ",StudentHome:" << (*i)->getHome() << endl;
}
//排序
list<Student*> ascSortByAge(list<Student*> students){
list<Student*> newStudents;
int n = students.size();
for(int j=0;j<n;j++){
int minAge = 99999;
Student* minStudent;
list<Student*>::iterator i;
for(i=students.begin();i!=students.end();i++){
if(minAge > (*i)->getAge()){
minAge = (*i)->getAge();
minStudent = *i;
}
}
for(i=students.begin();i!=students.end();i++){
if((*i)->getAge() == minAge){
students.erase(i);
break;
}
}
newStudents.push_back(minStudent);
}
return newStudents;
}
// 删除指定元素,类似ArrayList的remove
void remove(list<Student*> students,Student* student){
list<Student*>::iterator i;
for(i=students.begin();i!=students.end();i++){
if(*i == student){
students.erase(i);
break;
}
}
}
附上C++中list的相关操作
assign() 给list赋值
back() 返回最后一个元素
begin() 返回指向第一个元素的迭代器
clear() 删除所有元素
empty() 如果list是空的则返回true
end() 返回末尾的迭代器
erase() 删除一个元素
front() 返回第一个元素
get_allocator() 返回list的配置器
insert() 插入一个元素到list中
max_size() 返回list能容纳的最大元素数量
merge() 合并两个list
pop_back() 删除最后一个元素
pop_front() 删除第一个元素
push_back() 在list的末尾添加一个元素
push_front() 在list的头部添加一个元素
rbegin() 返回指向第一个元素的逆向迭代器
remove() 从list删除元素
remove_if() 按指定条件删除元素
rend() 指向list末尾的逆向迭代器
resize() 改变list的大小
reverse() 把list的元素倒转
size() 返回list中的元素个数
sort() 给list排序
splice() 合并两个list
swap() 交换两个list
unique() 删除list中重复的元素