2017-08-05 21:48:30 mycsdn_525 阅读数 95
  • 精通 S T L(C++标准模板库)

    STL是Standard Template Library的简称,中文名标准模板库,是集数据结构与算法集大成者。在C++程序应用领域,可谓是无所不在,大放光彩。 STL可分为容器(containers)、迭代器(iterators)、空间配置器(allocator)、配接器(adapters)、算法(algorithms)、仿函数(functors)六个部分。

    1466 人正在学习 去看看 王桂林


使用LinkedList实现栈数据结构特点的容器和队列数据结构特点的容器


import java.util.LinkedList;

/*
 * 有栈特点的容器
 */
public class Stack {
  private  LinkedList<Object> list  = new LinkedList<Object>();
  //入栈
  public void in(Object str){
   list.addLast(str);
  }
 
  //弹栈
  public Object out(){
   return list.removeLast();
  }
 
  //获取大小
  public int size(){
   return list.size();
  }
}
 


/*
 * 有队列特点的容器
 */
public class Queue {
  private  LinkedList<Object> list  = new LinkedList<Object>();
 
 //入队
  public void in(Object str){
   list.addLast(str);
  }
 
 //出队
  public Object out(){
   return list.removeFirst();
  }
 
 //获取大小
  public int size(){
   return list.size();
  }
}
 

2018-09-04 12:27:09 xiu351084315 阅读数 550
  • 精通 S T L(C++标准模板库)

    STL是Standard Template Library的简称,中文名标准模板库,是集数据结构与算法集大成者。在C++程序应用领域,可谓是无所不在,大放光彩。 STL可分为容器(containers)、迭代器(iterators)、空间配置器(allocator)、配接器(adapters)、算法(algorithms)、仿函数(functors)六个部分。

    1466 人正在学习 去看看 王桂林

1、数据结构中的容器

当很频繁地对序列中部进行插入和删除操作时,应该选择使用的容器是(B )

A  vector    B list    C deque     Dstack

   vector一般使用连续的一段内存区域来实现,适合数据变化不大或者仅在末尾添加删除元素的情形;list使用链表方式实现,如果数据变化频繁,首选list;deque是双向队列,一般使用分段连续存储的方式实现,而stack是堆栈,原则上只能在栈顶进行压栈、出栈操作。

2、考察链表

eg1、判断一个单向链表中是否存在环的最佳方法是( )

   A 两重遍历    B 快慢指针     C 路径记录     D 哈希表辅助

正确答案是: B,您的选择是:C

解析:

    定义两个指针fast和slow,每次slow后移一个结点,fast后移两个结点。最开始都在链表头部开始向后移动,如果单链表没有环,fast会达到或超过链表尾部,算法结束;若链表有环,最终两个指针都会进入环中,形成fast指针追赶slow指针的情况,直到某时刻fast和slow相等。此时即可判断链表是有环的。事实上,进一步,这是可以将任意一个指针拉会整个链表头部,另一个指针继续移动,此时两个指针都是一次后移一个结点,当二者再次相遇的结点,即为单链表的环的起始位置。
eg2:设某链表中最常用的操作是在链表的尾部插入或删除元素,假定链表只记录表头指针,则选用下列( )存储方式最节省运算时间。

A 单向链表      B 单向循环链表     C 双向链表    D 双向循环链表

正确答案是:D,您的选择是:A

解析:

    在尾部插入或者删除,需要记录尾结点的前驱,即倒数第2个结点;因为只能通过链表头指针找到倒数第2个结点,如果能够从后向前遍历,则经过两次即可找到它。因此,需要双向循环链表。
    双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表
eg3、链表不具备的特点是( )

A可随机访问任何一个元素 B插入、删除操作不需要移动元素 C无需事先估计存储空间大小 所需存储空间与线性表长度成正比

正确答案是:A,您的选择是:C

解析:

    无论单向链表还是双向链表,都只是记录当前结点的前驱或(和)后继。因此,不能随机访问任意元素。但插入、删除操作不需要移动元素,也不需要事先给定空间大小;但链表实际占用的存储空间是和线性表长度成正比的。

3、二叉搜索树【又叫二叉排序树】

eg、对于下列关键字序列,不可能构成某二叉排序树中的一条查找路径的序列是( )

A 95、22、91、24、94、71        B 92、20、91、34、88、35

C 21、89、77、29、36、38        D 12、25、71、68、33、34

正确答案是:A,您的选择是:A

解析:

    不妨假定二叉排序树是递增的,即根节点比左子树大,比右子树小(若关键字相等,一般归到右孩子中)。若是递减的,思考方式对称。A选项中,24比91小,说明24是91的左孩子,即24后面所有数都比91小;而后面的94>91,矛盾。所以,A不可能。

4、逆波兰表达式【后缀表达式】,掌握中缀表达式转后缀表达式

eg:表达式a*(-b+c)的逆波兰式是( )
逆波兰表示法(Reverse Polish notation,RPN,或逆波兰记法),是一种数学表达式方式,将正常的表达式生成一颗树,对这颗树做后序遍历,即得到逆波兰表达式。由于操作符置于操作数的后面,因此又称后缀表达式。如果不建立树,可以根据“操作符置于操作数后面”的原则,直接得到逆波兰表达式;如本题:a*(-b+c)→a*(b-c+)→a(b-c+)*,最后去掉括号,记得到ab-c+。

eg2:、表达式“X=A+B*(C-D)/E”的后缀表示形式可以为( )

解析:

    表达式由操作数和运算符组成。若是操作数则直接输出,若是运算符则利用栈S作为辅助结构存储。从左到右依次扫描,转换过程如下:
’X’直接输出;’=’压入S (此时S为空);’A’直接输出;当前’+’优先级大于栈顶’=’,故’+’ 压入S;’B’直接输出;当前’*’优先级大于栈顶’+’,故’*’ 压入S;左括号’(’直接压入S;’C’直接输出;当前’-’优先级大于栈顶左括号’(’, 故’-’ 压入S;遇到右括号,弹出栈顶’-’直到遇到左括号’(’;当前’/’ 优先级等于栈顶’*’,弹出栈顶’*’,并把’/’ 压入S;’E’直接输出;表达式结束,依次弹出S内’/’, ’+’和’=’。

 

5、考察堆【堆排序,最大堆、最小堆】

eg1、有一个长度为7的整形数组,里面存储了采用完全二叉树实现的最小堆,该数组中的所有元素都紧密存储,没有空隙,请问,该数组中不可能的元素序列是( )

A1 2 3 4 5 6 7    B1 2 4 3 5 6 7    C1 2 5 3 4 6 7    D1 4 2 3 5 6 7

 根据完全二叉树的性质,第一层(以根节点为第一层)有一个节点,第二层有两个节点,第三层有四个节点,依此类推。对于选项A来说,根节点是 1,1的左孩子是2,1的右孩子是3;2的左孩子是4,2的右孩子是5;3的左孩子是6,3的右孩子是7。可知,选项A满足最小堆的定义。同理,可以依次对选项B,选项C和选项D进行分析。得知,选项D中4的左孩子为3,右孩子为5,不满足最小堆。

堆是一种经过排序的完全二叉树,其中任一非终端节点的数据值均不大于(或不小于)其左子节点和右子节点的值。

最大堆和最小堆是二叉堆的两种形式。

最大堆:根结点的键值是所有堆结点键值中最大者。

最小堆:根结点的键值是所有堆结点键值中最小者。

6、考察图【连通图,非连通图,边与顶点关系及其相关计算】

、一个非连通无向图(无自回路和多重边)有66条边,那么它至少有( )个顶点。  A 11 B 12 C 13 D 14

正确答案是:C,您的选择是: B

解析:

    在连通无向图中,设边数最大为E,顶点数为V,则E=V*(V-1)/2。66条边的连通无向图的顶点数至少有12个[12*(12-1)/2=66],因此,在加入一个孤立点的情况下,连通无向图成为了非连通无向图,所以拥有66条边的非连通无向图至少有13个节点。

 7、哈夫曼树及哈夫曼编码

eg1、已知一段文本有1382个字符,使用了1382个字节存储,这段文本全部是由a、b、c、d、e字符组成,a 354次,b 483次,c 227次,d 96次,e 222次,对这5个字符使用哈夫曼编码。则以下说法不正确的是( )

A 使用哈夫曼编码后,使用编码值来存储这段文本将花费最少的存储空间

B 使用哈夫曼编码后,a b c d e 这5个字符对应的编码值是唯一确定的

C 使用哈夫曼编码后,a b c d e 这5个字符对应的编码值可以有多套,但每个字符的编码位数是确定的

D b这个字符的编码位数最短,d这个字符的哈夫曼编码位数应该最长

正确答案是: B,您的选择是: B

解析:

    哈夫曼编码根据各字符的出现频率不同,用短(长)编码表示频率大(小)的字符,使得编码序列的长度最小,占用最少的存储空间。
    哈夫曼方法构造出来的编码不是唯一的,有以下两个原因:1) 在给两个分支赋值时,可以是左支为0,右支为1,也可以相反,造成编码的不唯一;2) 两支路频率合并后重新排序时,可能出现几个支路频率相等,造成排序方法不唯一,不同的先后顺序构造出来的编码也不是唯一的。
    字符编码位数和其所在哈夫曼树中的深度有关。如果哈夫曼树的结点权值没有相等的情况,则字符的深度是确定的,字符编码的位数即确定了。
    因为b出现的频率最高,d出现的频率最低,所以b编码位数最短,d编码位数最长。该问题构造的一种可行的哈夫曼树如下:


8、排序

eg1、对下列四种排序方法,在排序中关键字比较次数与记录初始化顺序无关的是( )

A 直接插入排序    B 二分法插入    C 快速排序    D 归并排序

正确答案是: B,您的选择是:D

解析:

    为表述方便,以下论述假定需要将数据增序排列,并且不考虑元素相等特殊情况。使用直接插入排序时:若关键字已经增序排列,采用从后向前的比较方案,则第i趟插入时只需要和前面的1个元素比较,而一共需要n-1趟插入,因此,比较次数是O(N);平均情况下,第i趟插入的比较次数的期望是i/2,所以总比较次数是O(N2)。二分插入使用折半查找的方式寻找第i趟待插入元素的位置,比较次数是O(logN),因此总比较次数是O(NlogN),与记录的初始顺序无关。快速排序一般是使用首尾两个指针(索引)向中间扫描,直到相遇才完成一次patition的过程,因此,一趟快速排序的比较次数是固定的n次;但如果快速排序的枢纽元素仔细选择,可以在O(logN)趟完成排序,而如果枢纽元素选择很差,可能需要O(N)趟比较。归并排序中,若数据已经增序,则前后两个子数组的比较次数仅需要n/2次,而如果两个子数组交错生成需要比较n次。
eg2/对初始状态为递增序列的数组按递增顺序排序,最省时间的是插入排序算法,最费时间的算法是( )

A 堆排序    B 快速排序    C 插入排序    D归并排序

正确答案是: B,您的选择是:D

解析:

    对于A选项,建立一个大顶堆,每次可以O(1)时间完成取堆中最小值的,并在O(logN)时间完成调整,故总体在O(NlogN)时间完成排序; 
    对于B选项,每次选取最左端元素作为partition值进行一次划分,平均每次划分所需时间几乎是O(N)的,而对于有序数组,将进行N次划分,所以其时间复杂度为O(N2);
    对于C选项,在有序情况下,插入排序每次从原序列取一个元素即发现它在合适的位置,无需进行插入操作,即遍历一次即可完成排序,时间复杂度O(N);
    对于D选项,以二路归并说明,将长度为N序列划分为长度为N/2的子序列,每个序列进行归并排序后,将两个序列合并,得到排好序的序列,无论原序列是否有序,其排序时间复杂度为O(NlogN)。

9、考察哈希表

eg、已知一个线性表(38,25,74,63,52,48),假定采用散列函数h(key) = key%7计算散列地址,并散列存储在散列表A【0....6】中,若采用线性探测方法解决冲突,则在该散列表上进行等概率成功查找的平均查找长度为( )

A1.5  B1.7   C2.0      D2.3

正确答案是:C,您的选择是:A

解析:

根据散列函数规则,依次对7取余。定义mod为取余运算。由于38 mod 7=3,则38存储在a[3],即a[3]=38,元素38的查找次数为1;25 mod 7=4,则a[4]=25,元素25的查找次数也为1;74 mod 7 = 4,由于a[4]=25,此时发生冲突,使用线性探测法解决冲突,逐步后移直到成功插入,后移一步,则查找次数加1,因此a[5]=74,元素74的查找次数为2.同理,依次求得查找次数如下表所示:
由于等概率查找,则平均查找长度为(1+3+1+1+2+4)/6=2.

二、综合数据结构考察:

1、以下说法正确的有( )

A 在m阶B-树中,所有的非终端节点至少包含m/2个节点

B 若一个叶节点是某二叉树中的中序遍历的最后一个节点,同时它也是该二叉树前序遍历的最后一个节点

C 插入排序,堆排序,快速排序算法中,快速排序的速度是最快的,所需的附加空间也是最少的

D n个数中已知有k个关键字hash值相同,若用线性探测法将他们存入散列表中,至少需要进行k(k+1)/2次探测

正确答案是: B,您的选择是:A

解析:

    B-树是一种多叉平衡查找树。一个m阶的B树中,根节点至少有2个孩子;除了根节点和叶子节点外,其他内部节点至少包含⌈ m/2⌉个孩子节点。若考虑根节点可以只有2个孩子,则选项A不正确。二叉树中序遍历的顺序是左子树-根-右子树,前序遍历的顺序是根-左子树-右子树。若中序遍历的最后结点是叶结点,则它的父结点是它的前驱遍历结点,该叶结点是父节点的右孩子;因此在前序遍历时,该叶节点必然仍然是最后遍历的。快速排序需要辅助空间,最好和平均情况下的空间复杂度为O(logn)。在哈希表中存入第一个同义关键字后,后面至少连续有k-1个单元为空,故按照线性探测法可以依次存入剩余的k-1个关键字,至少需要1+2+ ...+ k-1= k(k-1)/2 次。

2、

1、在按层次遍历二叉树的算法中, 需要借助的辅助数据结构是( )A 队列    B 栈     C 线性表    D 有序表

正确答案是:A,您的选择是:C

解析:

    二叉树层次遍历指的是二叉树节点按深度次序由高到低,由左到右接受访问。层次遍历二叉树要用到队列,在遍历时具体做法如下:首先把根节点保存在一个队列中,然后从队列中取出节点访问,访问完毕后,把已经访问节点的左右孩子节点放入队列中,再次从队列中取出访问。这样重复下去,直到所有层的节点都被访问。队列的特点是先进先出,因此使用队列可以保证层序遍历的节点次序。
2、单链表的每个结点中包括一个指针link, 它指向该结点的后继结点. 现要将指针q指向的新结点插入到指针p指向的单结点之后, 下面的操作序列中哪一个是正确的( )

Aq:=p.link; p.link:=q.link;    Bp.link:=q.link; q:=p.link;    Cq.link:=p.link; p.link:=q;    Dp.link:=q; q.link:=p.link;

正确答案是:C,您的选择是: B

解析:

    如图所示,黑色是原来的链表,红色部分代表新节点插入的次序,在节点插入的时候,需要先将q节点的link指针指向p节点的下一个节点,然后让p节点link指针指向q节点。这样做的原因是,如果顺序相反,链表将会丢失p节点的下一个节点的地址,也就是p->link中保存的地址,破坏了链表的结构。

3、假设你要查找一个大型文件,不是查找相等的,而是找出最接近于一个给定Key的1000条记录。最接近的意义是:对于某个给定的距离函数d,这1000条记录的d(Ki,K)值为最小。对于这样一个顺序查找,以下数据结构中最为适合的是( )

A 双端队列     B 二叉堆   C 二叉查找树   D 平衡树   E B树   F以上都不适合

正确答案是: B,您的选择是:C

解析:

    对前1000个记录按照d(Ki,K)作为关键字建立大顶堆(堆顶元素最大),对于后面的N-1000个元素,若d(Ki,K)比堆顶元素小,则替换堆顶元素,并调整成大顶堆。遍历完所有数据后,堆内的1000个记录即为最接近Key的前1000条记录。

4

找出海量数据(N)中的最大K(<10000)个数,最快的平均时间复杂度是( )

A O(K^2)   B O(N log K)   C O(N^2)   D O(K Log N)   E O(NLogN)   F O(N*K)

正确答案是: B,您的选择是:E

解析:

    对海量数据中前K个数据建立小顶堆(堆顶元素最小),对于后面的N-K个元素,若比堆顶元素大,则替换堆顶元素,并调整成新的小顶堆。遍历完所有数据后,堆内的K个元素即为最大的K个数。时间复杂度为O(NlogK)。
2017-08-22 10:04:01 Jasmine_yaoyao 阅读数 272
  • 精通 S T L(C++标准模板库)

    STL是Standard Template Library的简称,中文名标准模板库,是集数据结构与算法集大成者。在C++程序应用领域,可谓是无所不在,大放光彩。 STL可分为容器(containers)、迭代器(iterators)、空间配置器(allocator)、配接器(adapters)、算法(algorithms)、仿函数(functors)六个部分。

    1466 人正在学习 去看看 王桂林

1. 库中queue的使用

代码如下:

#include <iostream>
#include <queue>
using namespace std;
int main()
{
    priority_queue<int> q; //优先级队列
    //入队列
    q.push(1);
    q.push(2);
    q.push(3);
    q.push(4);

    cout << q.top() << endl; //4
    cout << q.size() << endl; //4

    //出队列
    q.pop();
    q.pop();

    cout << q.top() << endl; //2
    cout << q.size() << endl; //2

    return 0;
}

2. 使用deque实现容器适配器栈

代码如下:

#include <iostream>
using namespace std;
#include <assert.h>

template<class T,int N = 7>
class Queue
{
public:
    Queue()
        :_front(0)
        , _rear(0)
        , _count(0)
    {}

    void Push(const T& data) 
    {
        assert(_count < N);
        _array[_rear] = data;
        _count++;
        _rear = (_rear + 1) % N;
    }

    void Pop() 
    {
        assert(_count);
        --_count;
        _front = (_front + 1) % N;
    }

    bool Empty()const 
    {
        return 0 == _count;
    }

    size_t Size()const
    {
        return _count;
    }

    T& Front() 
    {
        return _array[_front];
    }

    const T& Front()const
    {
        return _array[_front];
    }

    const T& Back()const
    {
        assert(_count);
        return _array[(_rear + N - 1) % N];
    }

private:
    T _array[N];
    int _front;
    int _rear;
    int _count;
};

int main()
{
    Queue<int> q;
    q.Push(1);
    q.Push(2);
    q.Push(3);
    q.Push(4);
    q.Push(5);
    q.Push(6);

    cout << q.Size() << endl;
    cout << q.Front() << endl;
    cout << q.Back() << endl;

    q.Push(7);
    cout << q.Size() << endl;
    cout << q.Front() << endl;
    cout << q.Back() << endl;

    q.Pop();
    q.Pop();
    cout << q.Size() << endl;
    cout << q.Front() << endl;
    cout << q.Back() << endl;

    q.Pop();
    q.Pop();
    q.Pop();
    q.Pop();
    q.Pop();
    cout << q.Size() << endl;
    cout << q.Front() << endl;
    return 0;
}
2016-05-08 23:52:34 zcxwww 阅读数 7172
  • 精通 S T L(C++标准模板库)

    STL是Standard Template Library的简称,中文名标准模板库,是集数据结构与算法集大成者。在C++程序应用领域,可谓是无所不在,大放光彩。 STL可分为容器(containers)、迭代器(iterators)、空间配置器(allocator)、配接器(adapters)、算法(algorithms)、仿函数(functors)六个部分。

    1466 人正在学习 去看看 王桂林


       先来看一个java里一些主要容器的继承图:

 


然后分别解析一下上面几种容器底层的数据结构以及一些实现:


1.ArrayList(非线程安全的)

底层的数据结构其实就是数组,但是它比数组优秀的地方在于他是动态的,即不必像数组那样固定大小,那么他是如何实现这种数据结构是数组,但是给我们看起来确实不固定大小的呢?

ArrayList 是通过将底层 Object 数组复制的方式(System.arraycopy方法)来处理数组的增长;

 当ArrayList 的容量不足时,其扩充容量的方式:先将容量扩充至当前容量的1.5倍,若还不够,则将容量扩充至当前需要的数量。


所以由上面可以看出ArrayList用于查找的话就相当于数组十分快,但是如果是插入或者删除的话则十分慢。


2.LinkedList(非线程安全)

顾名思义底层的数据结构是链表,而且是双向链表,所以他也具有链表的特点,即插入或者删除的话很快,但是如果是查找的话则比较缓慢。


3.HashSet(非线程安全)

底层数据结构是散列表(关于散列表看下面),仅仅存储对象(而hashMap是存储键值对),突出特点是存的对象不可重复,保证这一点是通过先对比每个对象的hashCode,如果hashCode相同,再对比equal()来确定两个对象是否重复,所以放入hashset的对象一定要重写hashCode()和equal().


4.HsahMap(非线程安全)

底层也是散列表(见下面),通过键值对来存储数据,通过键来获取值,速度比hashset快,键和值可以null.


5.LinkedHashMap

继承自HashMap,只不过在HashMap哈希表的数据结构基础上,又在每个entry里面记录上一个和下一个的引用,所以他有记录每个item顺序的功能(与hashmap相比),所以他实际上是哈希表加双向链表的一种数据结构。LruCache里面就是用的就是linkedhashmap来实现的。



现在介绍一下散列表(哈希表)这种数据结构:


首先每个对象产生一个哈希值(因为哈希值太大,数组不可能开这么大,会造成巨大浪费),所以需要通过一个哈希函数对哈希值进行转化,如图1000就转化为0,,3013就放入3,这样访问对象就跟数组一样便捷,插入对象也十分便捷,如果是碰到哈希值转化后是同一值得,即产生冲突,则像上面这种解决冲突的方式就是 链表的方式,哈希值在数组里同一位置的都用链表链接起来。所以散列表实际上是查找快,插入删除也快,解决了数组和链表各自的一些缺点。



    

2018-08-18 19:45:05 lc574260570 阅读数 270
  • 精通 S T L(C++标准模板库)

    STL是Standard Template Library的简称,中文名标准模板库,是集数据结构与算法集大成者。在C++程序应用领域,可谓是无所不在,大放光彩。 STL可分为容器(containers)、迭代器(iterators)、空间配置器(allocator)、配接器(adapters)、算法(algorithms)、仿函数(functors)六个部分。

    1466 人正在学习 去看看 王桂林

对于数据结构这样的一个词,我相信有过c语言基础的人都应该不陌生,
数据结构:(data structure)是相互之间存在一种或多种特定关系的数据元素的集合。

根据数据元素之间关系的不同特征,通常有下列4类基本结构:
1)集合
结构中的数据元素之间除了“同属于一个集合”的关系外,别无其他关系。
2)线性结构(数组,队列,栈)
结构中的数据元素之间存在一个对一个的关系
3)树形结构(二叉树,链表)
结构中的数据元素之间存在一个对多个的关系
4)图状结构网状结构
结构中的数据元素之间存在多个对多个的关系。

c语言中的容器
容器用来存储数据的,数据可以是用户自定义类型(对象),也可以是预定义类型,c++中的容器主要使用如vector,list (顺序容器) 这些都是已经封装好了的,包含头文件”vector”,”list”,通过迭代器iterator访问容器中的数据,map,set(关联容器),关联容器map键值对形式出现key-value,key唯一,mutimap多映射可以不唯一;set是一个单一值的集合,如1,2,3,4
顺序容器:vector,list 分别举例 对比
vector容器的特点:在内存中是一片连续的存储区域,初始化的时候,可以指定容量,比如如果定义容量50 的容器存储 60个string对象,由于初始容量不足60,容器将会重新定义一个容量是原来的2倍新容器,然后拷贝原容器的对象到新容器. 读取速度快,插入删除效率低.如果仅仅在容器头或尾部 进行增删改,推荐使用deque,专门提供了对首尾的操作.

python中的容器
列表
集合
字典
元组

可变对象
列表,字典,集合

不可变对象
字符串,元组 ,固定集合(forzenset)

python内置的数据结构
列表,集合,字典,元组
python外部的数据结构
队列,栈,链表重点内容


纠正一下大家一直混淆不清的,概念
数据结构和容器的区别
数据结构是一般的叫法。 容器是从使用目的出发的说法。 既然数据结构总归里面是要有数据的, 所以你要把它做容器也是可以说的通的。 但是同样的东西你使用它的目的、重点不同, 说法也会有些不同,比如一个水杯用来装水就是容器,用来砸人就是凶器, 数据结构也是一样, 当你的关注点不是在它“装数据”这一点的时候,我们一般也就不能说他叫容器了

C++中几种常见容器的数据结构

博文 来自: u013146882
没有更多推荐了,返回首页