C++的STL库,vector sort排序时间复杂度 及常见容器比较

【C++】使用vector存储百万级数据怎么优化? 描述:vector存储百万级数据如何优化? 一百万个int, 100 0000 * 4B = 4 * 10^6 B, 也就是4MB,还没L3 cache大,请问你还想怎么优化????????????????????????? 一百万个int, 100 0000 * 4B = 4 * 10^6 B, 也就是4MB,还没L3 cache大,请问你还想怎么优化????????????????????????? 一百万个int, 100 0000 * 4B = 4 * 10^6 B, 也就是4MB,还没L3 cac 阅读详情

http://www.cnblogs.com/sthv/p/5511921.html


http://www.169it.com/article/3215620760.html

http://www.cnblogs.com/sharpfeng/archive/2012/09/18/2691096.html

在C++的STL库中,要实现排序可以 通过将所有元素保存到vector中,然后通过sort算法来排序,也可以通过multimap实现在插入元素的时候进行排序。在通过 vector+sort进行排序时,所有元素需要先存入vector容器中,sort在排序时又需要将元素全部取出来再进行排序。multimap底层实 现为红黑树,因此元素在插入的过程中就实现了排序。那么到底哪一种排序速度更快呢?

   下面有一个测试程序:

   

#include <vector>
#include <set>
#include <algorithm>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/time.h>
using  namespace  std;
double  time () {
   struct  timeval tv;
   if  (gettimeofday(&tv, NULL) != 0)  return  0.0;
   return  tv.tv_sec + tv.tv_usec / 1000000.0;
}
struct  Score {
   string name;
   double  score;
   bool  operator <( const  Score& right)  const  {
     return  score < right.score;
   }
};
int  main( int  argc,  char ** argv) {
   vector<Score> src;
   for  ( int  i = 0; i < 10000000; i++) {
     int  num =  rand ();
     char  buf[32];
     sprintf (buf,  "%d" , num);
     Score score = { buf, num };
     src.push_back(score);
   }
   {
     double  stime =  time ();
     vector<Score> res;
     for  (vector<Score>::const_iterator it = src.begin();
          it != src.end(); ++it) {
       res.push_back(*it);
     }
     sort(res.begin(), res.end());
     double  etime =  time ();
     printf ( "vector: %f\n" , etime - stime);
   }
   {
     double  stime =  time ();
     multiset<Score> res;
     for  (vector<Score>::const_iterator it = src.begin();
          it != src.end(); ++it) {
       res.insert(*it);
     }
     double  etime =  time ();
     printf ( "multiset: %f\n" , etime - stime);
   }
   return  0;
}

程序运行结果为:

          time
vector   4.776060
multiset 10.761023

在这个测试中,vector+sort排序比multiset(multimap实现基于multiset)快多了。快速排序是目前已知的所有排序算法中最快的排序算法,因此它比基于堆排序的multiset快。

 在这个测试结果出来之前,大多数人都会毫无疑问地认为multiset排序要更快。这也是有原因的,快速排序速度虽然快,但是在实际的运行过程中,它需 要大量地拷贝元素,其拷贝操作的时间复杂度为o(NlogN),而基于红黑树的multiset在排序的过程中则避免了元素的拷贝。如果元素的内存占用空 间比较大,那么multiset排序的速度将比vector+sort快。为了测试这个结果,将上面测试程序中的结构体改为:

struct  Score {
   string name1;
   string name2;
   string name3;
   string name4;
   double  score;
   bool  operator <( const  Score& right)  const  {
     return  score < right.score;
   }
};

然后重新编译运行测试程序,测试结果为:

          time
vector   12.955739
multiset 11.368364

这个测试结果和我们的预期一致。

  总之,我们在使用STL的排序算法时,需要根据不同的元素构造来进行合适的选择,如果都是比较简单的元素,那么适合选择vector+sort来进行排 序,对于由字符串构成的占用了比较大的空间的复杂元素,应该使用multiset。如果排序的元素的总个数比较少,那么选择任意一种都可以。

 

 

 

 

list支持快速的插入和删除,但是查找费时;

 

vector支持快速的查找,但是插入费时。

 

map查找的时间复杂度是对数的,这几乎是最快的,hash也是对数的。 
如果我自己写,我也会用二叉检索树,它在大部分情况下可以保证对数复杂度,最坏情况是常数复杂度,而std::map在任何情况下都可以保证对数复杂度,原因是它保证存诸结构是完全二叉检索树,但这会在存诸上牺牲一些时间。

 

STL   中的   map   内部是平衡二叉树,所以平衡二叉树的性质都具备。查找数据的时间也是对数时间。vector,在分配内存上一般要比   new   高效的多。

 

为什么说   hash_map   是对数级的?在不碰撞的情况下,hash_map是所有数据结构中查找最快的,它是常数级的。 
如果对问题设计了足够好的hash算法,保证碰撞率很低,hash_map的查找效率无可置疑。 
另外,STL的map,它的查找是对数级的,是除hash_map外最高的了,你可以说“也许还有改进余地”,但对于99.9999%的程序员,设计一个比STL   map好的map,我执悲观态度。 
STL的map有平衡策略(比如红黑树什么的),所以不会退化,不需要考虑数据本身的分布问题。只不过,如果数据本身是排好序的,用vector或heap会明显的快些,因为它们的访问比较简单。

 

 

 

我 想没必要怀疑stl::map的查找效率,影响效率最主要的因素是什么?算法,在查找问题上,有什么算法比RB_tree更好吗?至少现在还没有。不否 认你可以通过自己写代码,设计一个符合你需要的BR—TREE,比stl::map简捷那么一点,但最多也就每次迭代中少一行指令而已,处理十万个数据多 执行十万行指令,这对你重要吗?如果你不是在设计OS像LINUX,没人会关注这十万行指令花的时间。 
rb-tree的时间花在了插入和删除上,如果你不是对插入和删除效率要求很高,你没有理由不选择基于rb-tree的stl::map。

 

 

 

大多数程序员写不出比std::map更好的map,这是当然的。然而并不是std::map的所有特性都出现在我们的程序中,自己编写的可以更适合自己的程序,的确会比std::map更快一些。

 

 

 

关于hash_map,它与map的实现机制是不一样的,map内部一般用树来实现,其查找操作是O(logN)的,这个没有争议,我就不多说了。 
hash_map 的查找,内部是通过一个从key到value的运算函数来实现的,这个函数“只接受key作为参数”,也就是说,hash_map的查找 算法与数据量无关,所以认为它是O(1)级的。来这里的应该都是达人,可以参看《数据结构》。当然,事实总不这样完美,再引一段前面我自已说的话,进一步 说明,以免误会:

 

----------------------------------------- 
在不碰撞的情况下,hash_map是所有数据结构中查找最快的,它是常数级的。 
------------------------------------------ 
注意我的前提:“在不碰撞的情况下”,其实换句话说,就是要有足够好的hash函数,它要能使key到value的映射足够均匀,否则,在最坏的情况下,它的计算量就退化到O(N)级,变成和链表一样。 
如果说   hash_map   是所有容器中最慢的,也只能说:“最拙劣的hash函数”会使hash_map成为查找最慢的容器。但这样说意义不大,因为,最凑巧的排列能使冒泡排序成为最快的排序算法。

 

BS: "对于大型容器而言,hash_map能够提供比map快5至10倍的元素查找速度是很常见的,尤其是在查找速度特别重要的地方.另一方面,如果hash_map选择了病态的散列函数,他也可能比map慢得多. "

 

ANSIC++在1998年之后就没再有重大改变,并且决定不再向C++标准库中做任何重大的变更,正是这个原因,hash   table(包括hash_map)并没有被列入标准之中,虽然它理应在C++标准之中占有一席之地。 
虽然,现在的大多数编译平台支持hash   table,但从可移植性方面考虑,还是不用hash   table的好。

 

 

 

hehe俺也来凑凑热闹。 
1.有的时候vector可以替代map 
比如key是整数,就可以以key的跨度作为长度来定义vector。 
数据规模很大的时候,差异是惊人的。当然,空间浪费往往也惊人。 
2.hash是很难的东西 
没有高效低碰撞的算法,hash_xxx没有意义。 
而对不同的类型,数据集,不可能有优良的神仙算法。必须因场合而宜。 
俺有的解决方法是GP,可不是饭型,是遗传编程,收效不错。

 

 

 

你的百万级的数据放到vector不大合适。因为vector需要连续的内存空间,显然在初始化这个容器的时候会花费很大的容量。 
使用map,你想好了要为其建立一个主键吗?如果没有这样的需求,为什么不考虑deque或者list? 
map默认使用的是deque作为容器。其实map不是容器,拿它与容器比较意义不大。因为你可以配置它的底层容器类型。

 

 

 

如果内存不是考虑的问题。用vector比map好。map每插入一个数据,都要排序一次。所以速度反不及先安插所有元素,再进行排序。

 

用 binary_search对已序区间搜索,如果是随机存取iterator,则是对数复杂度。可见,在不考虑内存问题的情况下,vector比map 好。

 

 

 

如果你需要在数据中间进行插入,list 是最好的选择,vector   的插入效率会让你痛苦得想死。

 

 

 

涉及到查找的话用map比较好,因为map的内部数据结构用rb-tree实现,而用vector你只能用线性查找,效率很低。

 

stl还提供了 hash容器,理论上查找是飞快~~~。做有序插入的话vector是噩梦,map则保证肯定是按key排序的,list要自己做些事情。

 

 

 

HASH类型的查找肯定快,是映射关系嘛,但是插入和删除却慢,要做移动操作, LIST类型的使链式关系,插入非常快,但是查找却费时,需要遍历~~ , 还是用LIST类型的吧,虽然查找慢点,

 

先快速排序,然后二分查找,效率也不低


C++ STL实战:基于vector与deque的评委打分系统设计与实现 在C++编程中,标准模板库(STL)是处理数据结构和算法的核心工具。其设计遵循泛型编程思想,通过容器、迭代器和算法的分离,提供了高效、可复用的组件。理解不同容器的特性(如vector的连续存储与随机访问、deque的双端高效操作)及其适用场景,是进行高性能C++开发的基础。这些技术价值在于能够根据具体问题选择最合适的数据结构,从而优化程序性能与代码清晰度。典型的应用场景包括需要管理动态集合、进行频繁头尾操作或排序过滤的数据处理任务。本文以经典的“评委打分”案例为切入点,深入探讨如何组合运用vector管理选 阅读详情

相关推荐

C++ STL容器与常用库函数

C++ STL(STL是提高C++编写效率的一个利器)

嵌入式技术开发 7396

[转] C++的STL库,vector sort排序时间复杂度 及常见容器比较

http://www.169it.com/article/3215620760.html http://www.cnblogs.com/sharpfeng/archive/2012/09/18/2691096.html 在C++的STL库中,要实现排序可以 通过将所有元素保存到vector中,然后通过sort算法来排序,也可以通过multimap实现在插入元素的时候进行排序。在通过 ...

weixin_30902251的博客 1059

别再乱调了!Zygo MetroPro软件滤波功能保姆级指南,从均值到鲁棒高斯样条一次讲清

本文深入解析Zygo MetroPro软件的滤波功能,从均值滤波到鲁棒高斯样条等九种算法,帮助用户根据测量对象特性选择最佳滤波组合。通过真实工业案例和参数配置指南,提升光学测量数据的准确性和效率,特别适用于硅晶圆、光学镜片等精密测量场景。

weixin_30888413的博客 158

C++ sort()

C++中sort()函数的特性: 标准函数sort() 的头文件:#include<algorithm> std::sort; sort() 默认是按元素从小到大排序; sort() 能用到vector和set中,vector是线性容器,set是关联容器; sort() 可以对静态的数组进行排序; C++中自带sort() 排序方法,需要提供待排序序列的头地址、尾地址、排序方式(降序或升序); sort() 时间复杂度为Nlog2(N); vecto...

JCjunior的博客 1973

【开源训练数据集2】10个最适合机器学习的股票市场数据集

​随着加密货币在世界各地的兴起,人们现在有比以往更多的投资方式。然而,这并不像低买高卖那么简单。如果你能准确预测股市,你就会成为地球上最富有的人之一。因此,之前已经有关于如何利用情绪分析来预测股市的研究。对于那些希望构建类似预测模型的人,本文将介绍 10 个用于机器学习的股票市场和加密货币数据集。

u010542847的博客 2139

Matlab双目相机标定

1 概述 现在有许多双目相机在出厂时就已经标定好了,用户拿到手后可以直接使用,例如Intel Realsense系列。但是有些相机出厂的时候并没有完成标定工作,因而这个时候就需要我们自己来标定。由于笔者曾改装过一个双目相机,最远可以测至50m,因此有一定的心得体会想给大家分享一下。本文主要介绍双目相机标定的整个过程,以及导出标定数据的方法。 相机标定主要分为手动标定和自动标定,手动标定比较繁琐,这里主要介绍基于matlab工具箱的自动标定方式来对双目相机进行标定。具体的相关标定细节也可以参照这篇博客:m

weixin_46133643的博客 2万+

STL中容器的时间复杂度分析

vector底层是一个数组: 查找find O(n) 删除erase O(n) 插入insert O(n) 扩充方式两倍成长 list底层是一个双向链表: 查找 find O(n) 删除erase O(1) 插入insert O(1) set map multiset multimap 底层是红黑树: 查找 find O(logn) 删除erase O(logn) 插入insert O(logn) priority_queue优先级队列: 本质是一个堆,插入、删除操作时间复杂度为O(nlogn)。 uno

jiuwu_95的博客 1118

《Long-CLIP: Unlocking the Long-Text Capability of CLIP》

总的来说,Long-CLIP是一个改进的视觉-语言预训练模型,它通过知识保留的位置上插值和主要成分匹配策略,有效解决了原始CLIP模型在处理长文本输入时的限制。这一模型不仅在长文本图像检索任务中表现出色,而且在零样本图像分类任务中保持了与原始CLIP相当的性能,同时还能以即插即用的方式增强图像生成任务中的长文本处理能力。

Angelina_Jolie的博客 1379

stl vector与list详细对比

1.vector与array的对比 vector是stl中常用的容器之一。vector与数组array比较类似,可以看成是array功能更强大的升级版。与array的不同在于,array是静态数组,容量大小在数组初始化的时候就是固定的。而vector是一个动态数组,即vector可以动态调整数组大小而无须用户进行手动干预。 因为vector的底层实现是数组,所以其优势是在尾部插入删除数据很快,时间复杂度只有O(1)。而当其在头部或者其他位置插入删除数据时,因为需要对元素进行移动复制,所以效率会很低。 2.v

bitcarmanlee的博客 1531

基于STM32L4XX、HAL库的ESP32-S3-WROOM-1-N4 WIFI模块驱动程序设计

/ 检查是否收到完整的一行(以\r\n结尾)// 例如: 解析AT命令响应或MQTT消息等。// UART2初始化已在CubeMX中配置。// USART2初始化函数(由CubeMX生成)// 缓冲区溢出,重置。// 如果需要等待响应。// 处理接收到的数据。// 处理接收到的数据。// 等待ESP32模块启动。// 主循环其他任务。// 启用UART全局中断。// 发送HTTP GET请求。// 发送AT测试命令。// 连接Wi-Fi。// UART中断回调函数。

zhusl6688的博客 286

深入Kafka:从SASL_PLAINTEXT到SASL_SSL的迁移之旅

本文详细介绍了如何将Apache Kafka从SASL_PLAINTEXT模式迁移到更安全的SASL_SSL模式。内容包括创建密钥库和信任库、生成证书签名请求、设置证书颁发机构、签署CSR以及修改Kafka配置文件的完整步骤。针对常见问题如SSL握手失败和循环连接尝试提供了解决方案。通过实施这些步骤,可以确保Kafka数据传输的安全性,实现客户端身份验证和加密传输。文章强调在操作过程中需仔细检查配置文件和证书信息,以确保迁移顺利完成。

m0_74337424的博客 84

C++ STL库之Vector简介及例题(二)

继“C++ STL库之Vector简介及例题(一)【点击查看】”之后,这篇文章我们继续上一次的介绍,继续对vector的一些算法的函数进行简析及例题分析。

weixin_51456573的博客 1204

uniapp [全端兼容] - 详细实现接入使用海康威视监控云端显示及控制功能,网站集成安装海康监控及实时监控显示、摄像头控制,实时推流、回放、放大缩小画面、视频画面截图、截屏抓拍及播放器解决延迟教程

uniapp,h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,vue,海康威视,海康监控,摄像头监控,实时监控画面,海康插件,无法连接,报错,uniApp对接海康处理接口认证规则,监控实时预览和回放功能,海康api接口,安全认证,海康开放平台,官方文档,播放海康摄像头的监控视频,海康实时监控播放详细步骤,web,黑屏,视频播放,回放,视频流地址,取流协议,视频sdk播放,hik,rtsp,rtmp,hls,ws,网站,网页,h5页面,后台管理系统,对接海康监控设备

🏆 前端领域优质创作者 1万+

C++的STL库

vector是将元素置于一个动态数组中加以管理的容器vecotr可以随机存取元素(支持索引值直接存取,用[]操作符或at()方法)vector尾部添加或移除元素非常快速,但在中部或头部插入元素或移除元素比较费时迭代器提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围(避免了越界的情况产生,即用下标法和at)

hoppingg的博客 2572

Lammps不同亲疏水性粗糙表面的润湿行为模拟(包含in文件)

Lammps粗糙表面的润湿行为模拟(包含in文件)前言—润湿行为模拟一、物理模型构建二、具体in文件—in文件内循环亲疏水性三、具体in文件—分子模板构建初始模型以及平衡态模拟四、全部代码(基地粗糙表面只提供data文件) 前言—润湿行为模拟 润湿现象:当液体与固体接触时,液体的附着层将沿固体表面延伸。当接触角 θ\rm \thetaθ 为锐角时,液体润湿固体,若θ为零时,液体将展延到全部固体表面上。润湿现象的产生与液体和固体的性质有关。(来自百度百科) 润湿行为的本质是固液之间的相互作用,也就是分子间的范

Rockyoung 7093

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

C++ STL库详解

STL库(英文全称:Standard Template Library,标准模板库),STL库提供了很多模板以供用户使用,从而精简代码,以提升代码的可读性。以快速排序为例:看起来是不是超级复杂?但是!!!一行就搞定了!这就是STL库的魅力!那么,接下来让我们进入STL的奇妙世界吧!

Tianshang301的博客 1653

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

C++基础:找出vector容器中最大的两个数

定义一个vector数组,并进行初始化,向其中填充10个不同的随机数(1-100),找出容器中最大的两个数并输出。

文优 1666

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

c++STL库与快速排序

也就是说,set得出的结论是10A与10B不等值,因此不一样,于是它将10B加入容器。首先我们回顾下排序算法稳定性的概念:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;可以看到,上面快排的思路是,从左往右找一个比中间值“大”(即cmp函数返回false)的元素,从右往左找一个比中间值“小”元素,然后交换两个元素的位置,使得大的在右边,小的在左边。

浪子回头 1510

C++ STL之容器介绍(vector、list、set、map)

STL(Standard Template Library)即标准模板库。STL通过使用模板实现了容器和算法的分离,允许程序员编写与类型无关的代码,这正是泛型编程的核心思想。

new9232的博客 1602

C++STL

着重介绍容器(vector,deque,list,queue,stack,set,map),算法(遍历,查找,排序,拷贝替换,算数,集合),迭代器

qq_53790711的博客 1568

C++ STL实战:从评委打分案例掌握vector、sort与accumulate高效应用

在C++编程中,标准模板库(STL)是处理数据集合与算法的核心工具。其设计遵循数据与算法分离的原则,通过迭代器作为桥梁,实现容器与算法的解耦与高效协作。这一设计极大地提升了代码的复用性、安全性与表达力,是编写现代化C++代码的基石。从工程实践角度看,STL能显著减少手动管理内存和实现基础算法的负担,让开发者更专注于业务逻辑。例如,在数据处理、游戏开发、工具软件等场景中,对一组数据进行存储、排序、统计是常见需求。本文以经典的评委打分场景为例,深入解析如何组合使用vector容器、sort排序算法与accumu

weixin_30268921的博客 351

【C++STL】vector的详细用法和底层原理

本文详细介绍了C++ STL中vector容器的使用方法,包括创建方式、常用成员函数和算法操作。主要内容包括:1. vector的创建方式及初始化方法;2. 迭代器、容量管理、元素访问和修改器等常用函数;3. push_back、insert、erase等元素操作方法;4. sort、unique、reverse等算法操作;5. 查找最值的方法;6. vector扩容机制及优化建议。文章通过代码示例展示了vector的各种用法,并比较了不同操作之间的区别,如push_back与emplace_back的效率

tangsl1552的博客 1606

CPP(容器)STL:

deque是一个双向开口的连续线性空间,可以在常数级的时间复杂度下对链表进行操作。deque是以**分段连续空间组合成的,当需要增加新的空间时,只需要配置一段定量连续空间拼接在头部或者尾部即可。因此,deque需要维护整体的连续性**,这也是deque的迭代器比较复杂的原因。deque内部有一个指针指向map,map是一小块连续空间,其中每个元素称为节点(node),这个node是这个指针,指向一个缓冲区,也就是实际存放数据的地方。deque是分段连续空间。

2301_79604637的博客 1232

STL 容器:vector 动态数组的全面解析

vector 不仅支持内置类型,还支持自定义结构体、类,同时可以与STL算法协同使用,实现排序、去重等高级操作,这也是vector高频使用的场景之一。存储自定义结构体时,需确保结构体有默认构造函数(如果手动定义了带参构造,需显式定义默认构造),否则初始化时会报错。// 自定义结构体:学生信息int age;int score;// 默认构造函数(必须有,否则vector<Student> v(5)会报错)// 带参构造函数(方便初始化)// 初始化自定义结构体vector。

qq_43402143的博客 1159

C++ sort排序函数的用法总结

标准模板库STL中的sort()函数,时间复杂度为n*log2(n),执行效率较高。 用法: ①、sort()函数可以三个参数也可以两个参数; ②、必须的头文件 #include &lt; algorithm&gt;和using namespace std。 ③、它使用的排序方法类似于快排,时间复杂度为n*log2(n) sort()函数有三个参数:(第三个参数可不写) (...

Curtis’Blog 2856

C++面试题:STL中的sort排序是稳定排序吗?

前言: 最近看到一个C++的面试题,问道STL中的sort排序是否是稳定排序? 回答: sort()排序当然不是稳定排序,sort是主要用到了快速排序,还结合了插入排序和堆排序。 注:关于sort的理解最好的方式就是看源码和看书 补充: STL中的排序算法如下: Effective STL对如何选择排序函数总结的很好: 1)若需对vector, string, deque, 或array...

algsup 1万+
上一篇: kill -3 pid打印trac
下一篇: 段错误bug的调试
adaptiver
博客等级 码龄16年 194粉丝 51原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值