C++学习笔记(二十六)

《C++ primer》学习笔记之二十六:None-type template parameter     4.Nonetype template parameter:即不代表类型的模板参数。此参数和真正的函数参数很像。  template    //此处的size即为Nonetype template parameter  T* f()  {   T aryT[size];      //注意这句:只有编译期常量可以作数组定义的长度   for( int i = 0; i    {    ar 阅读详情

在完成对C语言的学习后,我最近开始了对C++和Java的学习,目前跟着视频学习了一些语法,也跟着敲了一些代码,有了一定的掌握程度。现在将跟着视频做的笔记进行整理。本篇博客是整理C++知识点的第二十六篇博客。

本篇博客介绍了C++的list容器。

本系列博客所有C++代码都在Visual Studio 2022环境下编译运行。程序为64位。

目录

list容器

list基本概念

list构造函数

list赋值和交换

list大小操作

list插入和删除

list数据存取

list反转和排序


list容器

list基本概念

list将数据进行链式存储。

链表是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表的指针链接实现的。链表由一系列结点组成,结点包括本身数据元素以及存储下一个结点地址的指针。

STL的list是一个双向循环链表。

链表的存储方式不是连续的内存空间,因此链表list的迭代器(list<T>::iterator)只能用++和--(前置后置均可)。

list采用动态存储分配,不会造成内存浪费和溢出。list执行插入和删除很方便,但是遍历比较慢。

list插入和删除不会造成原有迭代器的失效,在vector中是不成立的。

list和vector各有优缺点,确定选用哪个容器应该综合考虑。

list构造函数

使用list需要包含头文件list。

list<T> lst创建一个list容器,存储T类型数据。

list(beg,end)将beg到end区间的元素(包括beg不包括end)拷贝给本身。

list(n,elem)将n个elem拷贝给本身。

list(const list &lst)是拷贝构造函数。

#include<iostream>
#include<list>
using namespace std;
int main(void)
{
	list<int> l1;
	l1.push_back(10);
	l1.push_back(20);
	l1.push_back(30);
	l1.push_back(40);
	l1.push_back(50);
	for (list<int>::iterator it = l1.begin(); it != l1.end(); it++) {
		cout << *it << "   ";
	}
	cout << endl;

	list<int>l2(l1);
	for (list<int>::iterator it = l2.begin(); it != l2.end(); it++) {
		cout << *it << "   ";
	}
	cout << endl;
	list<int>l3(l1.begin(), l1.end());
	for (list<int>::iterator it = l3.begin(); it != l3.end(); it++) {
		cout << *it << "   ";
	}
	cout << endl;

	list<int>l4(10, 20);
	for (list<int>::iterator it = l4.begin(); it != l4.end(); it++) {
		cout << *it << "   ";
	}
	cout << endl;
	return 0;
}

程序的输出是:

10   20   30   40   50
10   20   30   40   50
10   20   30   40   50
20   20   20   20   20   20   20   20   20   20
 

list赋值和交换

assign(beg,end)将beg到end(包括beg不包括end)的数据拷贝给本身。

assign(n,elem)将n个elem拷贝赋值给本身。

list& operator=(const list &lst)重载等号操作符。

swap(lst)将lst与本身元素互换。

#include<iostream>
#include<list>
using namespace std;
int main(void)
{
	list<int> l1;
	l1.push_back(10);
	l1.push_back(20);
	l1.push_back(30);
	l1.push_back(40);
	l1.push_back(50);
	for (list<int>::iterator it = l1.begin(); it != l1.end(); it++) {
		cout << *it << "   ";
	}
	cout << endl;

	list<int> l2;
	l2 = l1;
	for (list<int>::iterator it = l2.begin(); it != l2.end(); it++) {
		cout << *it << "   ";
	}
	cout << endl;

	list<int> l3;
	l3.assign(l2.begin(), l2.end());
	for (list<int>::iterator it = l3.begin(); it != l3.end(); it++) {
		cout << *it << "   ";
	}
	cout << endl;

	list<int> l4;
	l4.assign(5, 10);
	for (list<int>::iterator it = l4.begin(); it != l4.end(); it++) {
		cout << *it << "   ";
	}
	cout << endl;

	l3.swap(l4);
	for (list<int>::iterator it = l3.begin(); it != l3.end(); it++) {
		cout << *it << "   ";
	}
	cout << endl;
	for (list<int>::iterator it = l4.begin(); it != l4.end(); it++) {
		cout << *it << "   ";
	}
	cout << endl;
	return 0;
}

程序的输出是:

10   20   30   40   50
10   20   30   40   50
10   20   30   40   50
10   10   10   10   10
10   10   10   10   10
10   20   30   40   50

list大小操作

size()返回容器中元素个数。

empty()判断容器是否为空。

resize(num)重新指定容器长度为num,如果容器变长,就以默认值填充新位置。如果容器变短就删除超出容器长度的元素。

resize(num,elem)重新指定容器长度为num,如果容器变长,就以elem填充新元素。如果容器变短就删除超出容器长度的元素。

#include<iostream>
#include<list>
using namespace std;
int main(void)
{
	list<int> l;
	l.push_back(10);
	l.push_back(20);
	l.push_back(30);
	l.push_back(40);
	l.push_back(50);
	cout << l.empty() << endl;
	cout << l.size() << endl;

	for (list<int>::iterator it = l.begin(); it != l.end(); ++it) {
		cout << *it << "   ";
	}
	cout << endl;
	l.resize(10);
	for (list<int>::iterator it = l.begin(); it != l.end(); ++it) {
		cout << *it << "   ";
	}
	cout << endl;

	l.resize(15, 20);
	for (list<int>::iterator it = l.begin(); it != l.end(); ++it) {
		cout << *it << "   ";
	}
	cout << endl;

	l.resize(5);
	for (list<int>::iterator it = l.begin(); it != l.end(); ++it) {
		cout << *it << "   ";
	}
	cout << endl;
	return 0;
}

程序的输出是:

0
5
10   20   30   40   50
10   20   30   40   50   0   0   0   0   0
10   20   30   40   50   0   0   0   0   0   20   20   20   20   20
10   20   30   40   50

list插入和删除

push_back(elem)将elem加入容器尾部。

pop_back()删除最后一个元素。

push_front(elem)将elem加入容器头部。

pop_front()删除第一个元素。

insert(pos,elem)在pos位置插入elem。

insert(pos,n,elem)在pos位置插入n个elem。

insert(pos,beg,end)在pos位置插入beg到end的数据,包括beg不包括end。

clear()清除容器的所有数据。

erase(beg,end)删除beg到end的数据,包括beg不包括end。

erase(pos)删除pos位置数据。

remove(elem)删除容器中所有与elem值匹配的元素。

#include<iostream>
#include<list>
using namespace std;
int main(void)
{
	list<int> l;
	l.push_back(10);
	l.push_back(20);
	l.push_back(30);
	l.push_back(40);
	l.push_front(100);
	l.push_front(200);
	l.push_front(300);
	l.push_front(400);

	for (list<int>::iterator it = l.begin(); it != l.end(); ++it) {
		cout << *it << "   ";
	}
	cout << endl;

	l.pop_back();
	l.pop_front();
	for (list<int>::iterator it = l.begin(); it != l.end(); ++it) {
		cout << *it << "   ";
	}
	cout << endl;

	l.insert(++l.begin(), 20);
	l.insert(++(++(++l.begin())), 3, 50);
	for (list<int>::iterator it = l.begin(); it != l.end(); ++it) {
		cout << *it << "   ";
	}
	cout << endl;

	l.erase(++(++l.begin()));
	l.remove(20);
	for (list<int>::iterator it = l.begin(); it != l.end(); ++it) {
		cout << *it << "   ";
	}
	cout << endl;
	return 0;
}

程序的输出是:

400   300   200   100   10   20   30   40
300   200   100   10   20   30
300   20   200   50   50   50   100   10   20   30
300   50   50   50   100   10   30

list数据存取

front()返回第一个元素。

back()返回最后一个元素。

list不能用下标和at访问。

#include<iostream>
#include<list>
using namespace std;
int main(void)
{
	list<int> l;
	l.push_back(10);
	l.push_back(20);
	l.push_back(30);
	l.push_front(15);
	l.push_front(25);
	l.push_front(35);
	l.push_front(45);

	cout << l.front() << endl;
	cout << l.back() << endl;
	return 0;
}

程序的输出是:

45
30
 

list反转和排序

reverse()反转链表。

sort()进行链表排序。默认从小到大。

不支持随机访问迭代器的容器(如list)不可以用标准算法。

#include<iostream>
#include<list>
using namespace std;
int main(void)
{
	list<int> l;
	l.push_back(75);
	l.push_back(65);
	l.push_back(45);
	l.push_back(95);
	l.push_back(35);

	for (list<int>::iterator it = l.begin(); it != l.end(); ++it) {
		cout << *it << "   ";
	}
	cout << endl;
	l.reverse();
	for (list<int>::iterator it = l.begin(); it != l.end(); ++it) {
		cout << *it << "   ";
	}
	cout << endl;

	l.sort();
	for (list<int>::iterator it = l.begin(); it != l.end(); ++it) {
		cout << *it << "   ";
	}
	cout << endl;
	return 0;
}

程序的输出是:

75   65   45   95   35
35   95   45   65   75
35   45   65   75   95

对于自定义数据类型,排序时要指定排序规则。

#include<iostream>
#include<list>
#include<string>
using namespace std;
class person
{
public:
	string name;
	int age;
	int height;
	person(){}

	person(string name, int age, int height) {
		this->name = name;
		this->age = age;
		this->height = height;
	}
};

bool compare(person& p1, person& p2)
{
	if (p1.age != p2.age) {
		return p1.age > p2.age;
	}
	else {
		return p1.height > p2.height;
	}
}
int main(void)
{
	person p1("Jimena", 19, 190);
	person p2("Julia", 18, 160);
	person p3("Jose", 17, 180);
	person p4("Jeanne", 18, 180);
	person p5("John", 22, 160);
	
	list<person> l;
	l.push_back(p1);
	l.push_back(p2);
	l.push_back(p3);
	l.push_back(p4);
	l.push_back(p5);

	for (list<person>::iterator it = l.begin(); it != l.end(); ++it) {
		cout << "The name is " << it->name << " and the age is " << it->age << " and the height is " << it->height << endl;
	}
	cout << endl;

	l.sort(compare);
	for (list<person>::iterator it = l.begin(); it != l.end(); ++it) {
		cout << "The name is " << it->name << " and the age is " << it->age << " and the height is " << it->height << endl;
	}
	return 0;
}

程序创建了person类,有name age和height三个成员变量。compare函数接受两个person类对象,先比较age再比较height,结果是降序排序。main函数创建了一个list类型容器l,存储person类对象,并加入五个类对象。进行排序时将compare函数名作为参数传入。

程序的输出是:

The name is Jimena and the age is 19 and the height is 190
The name is Julia and the age is 18 and the height is 160
The name is Jose and the age is 17 and the height is 180
The name is Jeanne and the age is 18 and the height is 180
The name is John and the age is 22 and the height is 160

The name is John and the age is 22 and the height is 160
The name is Jimena and the age is 19 and the height is 190
The name is Jeanne and the age is 18 and the height is 180
The name is Julia and the age is 18 and the height is 160
The name is Jose and the age is 17 and the height is 180

【C++STL基础入门】list交换、翻转,排序、合并和拼接操作 在C++的标准模板库(STL)中,list是一个双向链表容器,提供了丰富的功能和操作。本文将介绍list容器在交换、翻转、排序、合并和拼接等方面的基础操作和用法。通过本文的介绍,我们了解了list容器在交换、翻转、排序、合并和拼接方面的基础操作。这些功能使得list容器成为一个强大而灵活的工具,为我们的编程提供了便利。在实际应用中,我们可以根据具体需求,灵活运用这些操作,以满足不同的场景需求。希望本文对你对C++STL中list容器的基础入门有所帮助! 阅读详情

相关推荐

展锐双摄帧同步实战:从配置到调试的完整避坑指南

本文深入剖析了在展锐平台上实现双摄帧同步的完整流程与核心技术。详细对比了硬件帧同步与软件帧同步的差异、应用场景及核心挑战,提供了从XML配置、驱动层适配到调试验证的实战指南。重点强调了硬件帧同步必须与固定帧率强绑定这一关键避坑点,并分享了针对景深虚化等场景的同步质量验证方法及长稳测试策略。

kiwi8的博客 401

无涯教程-C++ List - swap()函数

C++ List swap()函数与另一个相同类型的列表交换列表的内容,但是大小可以不同。

无涯教程 1015

生信实战:用bcftools玩转VCF文件处理(从压缩到注释全流程)

本文详细介绍了使用bcftools处理VCF文件的全流程实战指南。从数据准备、压缩索引、信息提取、质量统计到核心的变异过滤与功能注释,手把手教你高效管理基因组变异数据。重点阐述了如何利用bcftools进行VCF文件注释,整合外部数据库信息,为变异位点添加关键的生物学标签,是生物信息学数据分析的必备技能。

rgv23456789的博客 340

[C++ STL] list::swap()

list::swap() 交换两个容器中的元素,前提是元素类型相同: #include <iostream> #include <list> int main() { // list container declaration std::list<int> mylist1{1, 2, 3, 4, 5, 6}; std::list<...

K.Sun 4278

本地部署DeepSeek连接MATLAB:打造私有化AI编程助手全攻略

大型语言模型(LLM)通过理解自然语言生成代码、解释技术概念,其核心原理是基于海量数据训练的Transformer架构。这项技术为工程计算和数据分析带来了效率革命,尤其在代码生成、调试辅助和文档自动化等场景价值显著。开源模型如DeepSeek-coder凭借优秀的代码理解能力,结合Ollama提供的本地化部署方案,实现了完全离线、低延迟的私有化部署。通过配置国内镜像加速下载,并利用MATLAB内置的HTTP通信函数构造API请求,工程师可以在熟悉的MATLAB环境中直接调用本地模型,处理数据清洗、算法验证等

weixin_30239339的博客 516

手把手教你搭建《黑色沙漠》单机版:从下载到联机的完整指南(含GM工具使用)

本文提供《黑色沙漠》单机版从下载安装到GM工具使用及局域网联机的完整教程。详细解析不同版本选择、系统配置要求、常见问题解决,并分享GM工具高级命令和局域网联机设置技巧,帮助玩家轻松搭建个性化游戏环境。

weixin_28738165的博客 467

C++ list 类学习笔记

双向循环链表list         list是双向循环链表,,每一个元素都知道前面一个元素和后面一个元素。在STL中,list和vector一样,是两个常被使用的容器。和vector不一样的是,list不支持对元素的任意存取。list中提供的成员函数与vector类似,不

whz_zb的专栏 10万+

SAP中关于预测需求的重要载体:计划独立需求

预测,就是为了调节客户需求的波动、不平衡,使企业的生产计划、物料计划尽量平稳、有序的必备工具。计划独立需求,Planned Independent Requirement(PIR)是SAP系统中最常见的预测需求。

saplakes的博客 1878

【手撕STL】list

目录list的介绍及使用list的迭代器失效list的模拟实现三级目录 list的介绍及使用 list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。 list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。 list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高效。 与其他的序列式容器相比(array,vector,deque),li

AI_ELF的博客 1246

【人工智能】全面盘点国内AI九大模型:各擅胜场的智能先锋(豆包、文心一言、讯飞星火、通义千问、Kimi、智谱清言、腾讯元宝、秘塔、天工AI)

追求性价比与全能:选豆包,适合个人与中小企业日常使用;侧重中文创作与理解:选文心一言,文学与商业文案创作首选;需要专业语音交互:选讯飞星火,智能客服、车载场景必备;看重生态与多场景:选通义千问,适配电商、办公等企业需求;处理超长文本任务:选Kimi,文档分析、学术研究的利器;专注深度推理创作:选智谱清言,学术与创意写作的伙伴;依赖腾讯生态协同:选腾讯元宝,日常轻量需求的便捷之选;深耕法律学术领域:选秘塔,专业文本处理的权威工具;布局前沿技术体验:选天工AI,享受接近国际顶尖的智能服务。

奶爸的编程之路,也就一周冷个三天 1121

第一节:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入门

vben5 快速入门。 Vben Admin 框架新出的版本V5.5.4,而之前的Vben Admin 2.x 目前已存档,仅进行重大问题修复。之前在2.x版本曾经简单完成了一版专栏文章,当时也是收获了一些好评和建议。本次决定在v5 版本基础上再完成一次前后端的搭建。希望大家继续多多支持。项目精简后,再次启动项目,执行 pnpm run dev点击登录,可以看到接口报错,现在前端请求的后端有报错,下一节处理这部分逻辑。

cuiwin的专栏 7065

C++学习笔记(二十六)——deque

std::deque(双端队列,double-ended queue)是 C++ STL(标准模板库)中的序列容器,类似于 std::vector,但支持在两端高效地插入和删除元素。

weixin_45857378的博客 615

Kaggle赛题总结:Enefit - Predict Energy Behavior of Prosumers

竞赛旨在解决能源不平衡的问题,即预计使用的能源与实际使用或产生的能源不符。自发自用者是既消耗又产生能源的个体,他们在造成能源不平衡方面起到了重要作用。尽管他们只占所有能源消费者的一小部分,但他们不可预测的能源使用行为给能源公司带来了物流和财务问题。如果不加以解决,可能会导致运营成本增加、电网不稳定以及能源资源的低效利用。如果这个问题得到有效解决,将显著降低不平衡成本,提高电网的可靠性,并使自发自用者更高效和可持续地融入能源系统中。

猫敷雪 741

Effective C++ 学习笔记 《二十六》

Item 26: Postpone variable definitions as long as possible. 这一节作者谈到的内容是关于变量的定义时机问题。需要考虑这样的一个问题的原因就在于当定义一个变量的时候,就意味着对这个变量对象进行构造(如果有构造函数),以及在离开它作用域的时候进行析构,也就是说需要承担这些消耗。那么如何避免没有意义的消耗就是一个值得考虑的话题 作者给出的建议就是...

Teee 396

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

C++学习笔记【二十六】——类的静态成员

静态成员数据 说明可见另一篇文章:C++学习笔记【六】—— 存储类 - 静态成员变量属于整个类所有 - 静态成员变量的生命期不依赖于任何对象,为程序的生命周期 - 可以通过类名直接访问公有静态成员变量 - 所有对象共享类的静态成员变量 - 可以通过对象名访问公有静态成员变量 - 静态成员变量需要在类外单独分配空间 - 静态成员变量在程序内部位于全局数据区 (Type className::VarName = value) 静态成员函数 如果把函数成员声明为静态的,就可以把函数与类的任何特定对象

xiaodouhao123456的博客 163

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

C++学习笔记二十六-固有的不可移植的特征

一、概述: 1.编写可以容易从一个机器移到其他机器的低级程序是 C 程序设计语言的一个特点。将程序移到新机器的过程称为“移植”,所以说 C 程序是可移植的。 2.为了支持低级编程,C 语言定义了一些固有不可移植的特征。算术类型的大小随机器不同而变化的事实,就是我们已经遇到过的一个这样的不可移植特征。 3. C++ 的另外两个从 ...

anhuang5101的博客 281

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【C++】学习笔记二十六——break和continue语句

break和continue语句都是程序能够跳过部分代码。可以在switch语句或任何循环中使用break语句,使程序跳到switch或循环后面的语句处执行。continue语句用于循环中,让程序跳过循环体中余下的代码,并开始新一轮循环。

buaadf的博客 1288

c++学习笔记(二十六)运算符

算数运算符: 运算符 描述 + 把两个操作数相加 - 从第一个操作数中减去第二个操作数 * 把两个操作数相乘 / 分子除以分母 % 取模运算符,整除后的余数 ++ 自增运算符,整数值增加 1 -- 自减运算符,整数值减少 1 关系运算符: 运算符 描述 == 检查两个操作数的值是否相等,如果相等则条件为真。 != 检查两个操作数的值是否相等,如果不相等则条件为真。 > 检查左操作数.

weixin_52820035的博客 198

【C++学习笔记(二十六)】之输入与输出的详细介绍

一. 输入/输出        程序的输入指的是从输入文件将数据传送给程序,程序的输出指的是从程序将数据传送给输出文件。 二. C++的输入输出: (一)标准I/O:        对系统指定的标准设备的输入和输出。即从键盘输入数据,输出到显示器屏幕。这种输入输出称为标准的输入输出 (二)文件I/O:        以外存磁盘文件为对象进行输入和输出,即从磁盘文件输入

开发小鸽 2112

C++学习笔记(二十六):c++ 复制与拷贝构造函数

手动实现String类来展示copy操作。

qq_16701727的博客 840

C++学习笔记(二十六)虚函数 多态 dynamic_cast

学习要点: 1 虚函数 根据对象类型来调用函数 而不是根据指针类型 2 子类中的与虚函数同名函数的都是虚函数 2013-5-5补充: 这个说法有点不准确: (1) 如果必须参数列表和返回值函数名都相同 才能认为是对虚函数的重写,仍然是虚函数 (2)函数后面有const 和 无const,可以视为两种不同函数 ,这个必须和基类中一致才能视为虚函数 在这些不一致,或者说重写虚函数不成功的

827

《Effective Modern C++》学习笔记之条款二十六:避免依万能引用型别进行重载

如果我们在代码中使用万能引用型别作为函数重载的一个特征标,这样在我们使用该重载函数时,实际调用的函数可能与我们期望不符: 示例代码如下: #include <memory> #include <iostream> #include <set> using namespace std; //万能引用型别重载 template <class T> void MaKeZiYuan(T&& t) { cout << "MaK..

王木木 313

C++语法学习笔记二十六: 理解模板类型推断、查看类型推断结果

// 理解模板类型推断、查看类型推断结果 #include <iostream> //#include <boost/type_index.hpp> //template<typename T> //T是类型模板参数,所以T是右类型的 //void myfunc(T& tmprv){ //tmprv 形参,形参也是有类型的,往往tmprv形参的类型和T类型模板参数的类型不一样 // cout << "------------begin-.

哲学天空的博客 284

C++学习笔记(二十六)设计模式学习之单例模式

单例模式作用:保证为一个类只生成唯一的实例对象。也就是说,在整个程序空间中,该类只存在一个实例对象为什么需要单例模式?  在多个线程之间,比如初始化一次socket资源  在整个程序空间使用全局变量,共享资源  大规模系统中,为了性能的考虑,需要节省对象的创建时间实现单例步骤常用步骤   构造函数私有化  提供一个全局的静态方法(全局访问点)  在类中定义一个静态指针,指向本类的变量的静态变量指针...

ArrowYL的博客 258

狄泰C++课程学习笔记:第二十五、二十六课:静态成员变量和静态成员方法

1、类中的静态成员变量    所谓类中的静态成员变量,也就是类中使用static关键字来修饰的成员变量,针对静态成员变量,大致有以下几点需要注意:        * static修饰的静态成员变量不属于任何一个对象,是该类本身的内容        * 存储上,静态成员变量会被分配在全局数据区,在程序运行期间均有效        * 初始化上,静态成员变量由于不数据任何一个实体对象,是当前类的所有类...

许的博客 254
上一篇: Java学习笔记(二十五)
下一篇: C++学习笔记(二十七)
tfmbty
博客等级 码龄4年 22粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值