C++ STL 线性容器的用法

cout << *i << " ";

cout << endl;

}

int main()

{

int a[5] = { 1, 2, 3, 4, 5 };

vector v(a, a + 5); //将数组a的内容放入v

cout << "1) " << v.end() - v.begin() << endl; //两个随机迭代器可以相减,输出:1)5

cout << “2)”; PrintVector(v); //输出:2)1 2 3 4 5

v.insert(v.begin() + 2, 13); //在 begin()+2 位置插人 13

cout << “3)”; PrintVector(v); //输出:3)1 2 13 3 4 5

v.erase(v.begin() + 2); //删除位于 begin()+2 位置的元素

cout << “4)”; PrintVector(v); //输出:4)1 2 3 4 5

vector v2(4, 100); //v2 有 4 个元素,都是 100

v2.insert(v2.begin(), v.begin() + 1, v.begin() + 3); //将v的一段插入v2开头

cout << “5)v2:”; PrintVector(v2); //输出:5)v2:2 3 100 100 100 100

v.erase(v.begin() + 1, v.begin() + 3); //删除 v 上的一个区间,即 [2,3)

cout << “6)”; PrintVector(v); //输出:6)1 4 5

return 0;

}

#include

#include

using namespace std;

int main()

{

vector<vector > v(3); //v有3个元素,每个元素都是vector 容器

for(int i = 0;i < v.size(); ++i)

for(int j = 0; j < 4; ++j)

v[i].push_back(j);

for(int i = 0;i < v.size(); ++i) {

for(int j = 0; j < v[i].size(); ++j)

cout << v[i][j] << " ";

cout << endl;

}

return 0;

}

list

====

list 是顺序容器的一种。list 是一个双向链表。使用 list 需要包含头文件 list。双向链表的每个元素中都有一个指针指向后一个元素,也有一个指针指向前一个元素。

list 容器不支持根据下标随机存取元素。

list 的构造函数和许多成员函数的用法都与 vector 类似,此处不再列举。除了顺序容器都有的成员函数外,list 还独有如下函数

| 成员函数或成员函数模板 | 作  用 |

| — | — |

| void push_front(const T & val) | 将 val 插入链表最前面 |

| void pop_front() | 删除链表最前面的元素 |

| void sort() | 将链表从小到大排序 |

| void remove (const T & val) | 删除和 val 相等的元素 |

| remove_if | 删除符合某种条件的元素 |

| void unique() | 删除所有和前一个元素相等的元素 |

| void merge(list  & x) | 将链表 x 合并进来并清空 x。要求链表自身和 x 都是有序的 |

| void splice(iterator i, list  & x, iterator first, iterator last) | 在位置 i 前面插入链表 x 中的区间 [first, last),并在链表 x 中删除该区间。链表自身和链表 x 可以是同一个链表,只要 i 不在 [first, last) 中即可 |

STL 中的算法 sort 可以用来对 vector 和 deque 排序,它需要随机访问迭代器的支持。因为 list 不支持随机访问迭代器,所以不能用算法 sort 对 list 容器排序。因此,list 容器引入了 sort 成员函数以完成排序。

#include //使用 list 需要包含此头文件

#include

#include //使用STL中的算法需要包含此头文件

using namespace std;

class A {

private: int n;

public:

A(int n_) { n = n_; }

friend bool operator < (const A & a1, const A & a2);

friend bool operator == (const A & a1, const A & a2);

friend ostream & operator << (ostream & o, const A & a);

};

bool operator < (const A & a1, const A & a2) {

return a1.n < a2.n;

}

bool operator == (const A & a1, const A & a2) {

return a1.n == a2.n;

}

ostream & operator << (ostream & o, const A & a) {

o << a.n;

return o;

}

template

void Print(T first, T last)

{

for (; first != last; ++first)

cout << *first << " ";

cout << endl;

}

int main()

{

A a[5] = { 1, 3, 2, 4, 2 };

A b[7] = { 10, 30, 20, 30, 30, 40, 40 };

list lst1(a, a + 5), lst2(b, b + 7);

lst1.sort();

cout << “1)”; Print(lst1.begin(), lst1.end()); //输出:1)1 2 2 3 4

lst1.remove(2); //删除所有和A(2)相等的元素

cout << “2)”; Print(lst1.begin(), lst1.end()); //输出:2)1 3 4

lst2.pop_front(); //删除第一个元素

cout << “3)”; Print(lst2.begin(), lst2.end()); //输出:3)30 20 30 30 40 40

lst2.unique(); //删除所有和前一个元素相等的元素

cout << “4)”; Print(lst2.begin(), lst2.end()); //输出:4)30 20 30 40

lst2.sort();

lst1.merge(lst2); //合并 lst2 到 lst1 并清空 lst2

cout << “5)”; Print(lst1.begin(), lst1.end()); //输出:5)1 3 4 20 30 30 40

cout << “6)”; Print(lst2.begin(), lst2.end()); //lst2是空的,输出:6)

lst1.reverse(); //将 lst1 前后颠倒

cout << “7)”; Print(lst1.begin(), lst1.end()); //输出 7)40 30 30 20 4 3 1

lst2.insert(lst2.begin(), a + 1, a + 4); //在 lst2 中插入 3,2,4 三个元素

list ::iterator p1, p2, p3;

p1 = find(lst1.begin(), lst1.end(), 30);

p2 = find(lst2.begin(), lst2.end(), 2);

p3 = find(lst2.begin(), lst2.end(), 4);

lst1.splice(p1, lst2, p2, p3); //将[p2, p3)插入p1之前,并从 lst2 中删除[p2,p3)

cout << “8)”; Print(lst1.begin(), lst1.end()); //输出:8)40 2 30 30 20 4 3 1

cout << “9)”; Print(lst2.begin(), lst2.end()); //输出:9)3 4

return 0;

}

=

stack 是容器适配器的一种。要使用 stack,必须包含头文件 。

stack就是“栈”。是一种后进先出的元素序列,访问、添加和删除都只能对栈顶的元素行。栈内的元素不能访问。

stack的定义如下:

template < class T, class Cont == deque >

class stack{

};

第二个参数表明,在默认情况下,stack 就是用 deque 实现的。当然,也可以指定用 vector 或 list 实现。

虽然 stack 使用顺序容器实现,但它不提供顺序容器具有的成员函数。除了 size、 empty 这两个所有容器都有的成员函数外,stack 还有以下三个成员函数

stack的成员函数
成员函数功  能
void pop();弹出(即删除)栈顶元素
T & top();返回栈顶元素的引用。通过此函数可以读取栈顶元素的值,也可以修改栈顶元素
void push (const T & x);将 x 压入栈顶

#include

#include //使用stack需要包含此头文件

using namespace std;

int main()

{

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

[外链图片转存中…(img-CjRRyK8z-1715619238711)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值