zoukankan      html  css  js  c++  java
  • C++ list用法

    创建一个list实例并赋值:

     1 // 创建实例以及赋值
     2 #include <iostream>
     3 #include <list>
     4 using namespace std;
     5 int main () {
     6     //第一种,通过构造函数
     7     int myints[] = {75,23,65,42,13};
     8     list<int> mylist1(myints, myints+5);
     9     list<int> mylist2(2,100);         // 2个值为100的元素
    10     //第二种,用push_back,或push_front
    11     for (int i = 1; i <= 5; ++i) mylist1.push_back(i);
    12     mylist2.push_front (200);
    13     mylist2.push_front (300);
    14     //第三种,用assign
    15     list<int> first;
    16     list<int> second;
    17     first.assign(7,100);                       // 给first添加7个值为100的元素
    18     second.assign(first.begin(), first.end()); // 复制first给second
    19     int myints[] = {16, 8, 4};
    20     first.assign (myints, myints + 3);         // 将数组myints的内容添加给first
    21 
    22     //第四种,见insert函数
    23     return 0;
    24 }

    成员函数:

    Iterator:  (可用于遍历list)

    iterator begin();  //返回指向第一个元素的迭代器

    iterator end();  //返回指向最后一个元素的迭代器

    reverse_iterator rbegin();  //返回指向第一个元素的逆向迭代器

    reverse_rend();  //返回指向最后一个元素的逆向迭代器

     1 //list的遍历
     2 #include <iostream>
     3 #include <list>
     4 using namespace std;
     5 int main () {
     6     int myints[] = {75,23,65,42,13};
     7     list<int> mylist (myints,myints+5);
     8     cout << "mylist contains:";
     9     //这是正序输出:
    10     for (list<int>::iterator it = mylist.begin(); it != mylist.end(); ++it)
    11         cout << ' ' << *it;
    12     cout << '
    ';
    13 
    14     list.clear();
    15     //逆序输出:
    16     for (int i = 1; i <= 5; ++i) mylist.push_back(i);
    17     cout << "mylist backwards:";
    18     for (list<int>::reverse_iterator rit = mylist.rbegin(); rit != mylist.rend(); ++rit)
    19         cout << ' ' << *rit;
    20     cout << '
    ';
    21     return 0;
    22 }

    输出结果为:
    mylist contains: 75 23 65 42 13
    mylist backwards: 5 4 3 2 1

    Capacity: (用于获取list容器大小信息)

    bool empty() const;  //list为空时返回true

    size_type size() const;  //返回list容器里元素的个数

    size_type max_size() const;  //返回list容器最大能容纳的元素的个数,主要用于调用list的resize()函数时,检查所请求的size大小是否被允许

    Element access:(用于获取首尾元素)

    reference front();  //返回第一个元素的引用

    const_reference front() const;

    reference back();  //返回最后一个元素的引用

    const_reference front() const;

    Modifiers:

    • asign  //给容器添加新内容:

    template<class InputIterator>

    void assign(InputIterator first, InputIterator last);  //first,last是一个序列中起始和结束的迭代器的值,[first, last)包含了序列中所有元素

    void assign(size_type n, const value_type& val);  //给list赋值n个值为val的元素

     1 // list::assign
     2 #include <iostream>
     3 #include <list>
     4 using namespace std;
     5 int main () {
     6     list<int> first;
     7     list<int> second;
     8     first.assign(7,100);                      // 给first添加7个值为100的元素
     9     second.assign(first.begin(), first.end()); // 复制first给second
    10 
    11     int myints[] = {16, 8, 4};
    12     first.assign (myints, myints + 3);            // 将数组myints的内容添加给first
    13 
    14     cout << "Size of first: " << int (first.size()) << '
    ';
    15     cout << "Size of second: " << int (second.size()) << '
    ';
    16     return 0;
    17 }
    输出结果为:
    Size of first: 3
    Size of second: 7
    • push_front, pop_front, push_back, pop_back

    void push_front(const value_type& val);  //在list头添加元素

    void pop_front();  //删除list头的元素

    void push_back(const value_type& val);  //在list尾添加元素

    void pop_back();  //删除list尾的元素

     1 #include <iostream>
     2 #include <list>
     3 using namespace std;
     4 int main () {
     5     list<int> mylist (2,100);         // 2个值为100的元素
     6     // list::push_front
     7     mylist.push_front (200);
     8     mylist.push_front (300);
     9 
    10     cout << "mylist contains:";
    11     for (list<int>::iterator it = mylist.begin(); it != mylist.end(); ++it)
    12         cout << ' ' << *it;
    13     cout << '
    ';
    14 
    15     // list::pop_front
    16     cout << "Popping out the elements in mylist:";
    17     while (!mylist.empty()) {
    18         cout << ' ' << mylist.front();
    19         mylist.pop_front();
    20     }
    21     cout << "
    Final size of mylist is " << mylist.size() << '
    ';
    22 
    23     // list::push_back
    24     int myint;
    25     cout << "Please enter some integers (enter 0 to end):
    ";
    26     do {
    27         cin >> myint;
    28         mylist.push_back (myint);
    29     } while (myint);
    30     cout << "mylist contains:";
    31     for (list<int>::iterator it = mylist.begin(); it != mylist.end(); ++it)
    32         cout << ' ' << *it;
    33     cout << '
    ';
    34 
    35     // list::pop_back
    36     while (!mylist.empty()) {
    37         cout << ' ' <<  mylist.back();
    38         mylist.pop_back();
    39     }
    40     cout << "
    Final size of mylist is " << mylist.size() << '
    ';
    41 
    42     return 0;
    43 }
    输出结果:
    mylist contai: 300 200 100 100
    Popping out the elements in mylist: 300 200 100 100
    Final size of mylist is 0
    Please enter some integers (enter 0 to end):
    56 23 8 5 6 0
    mylist contains: 56 23 8 5 6 0
    0 6 5 8 23 56

    Final size of mylist is 0
    • insert  //插入元素:

    iterator insert (iterator position, const value_type& val);  //position是要插入的这个list的迭代器,val是要插入的值

    void insert (iterator position, size_type n, const value_type& val);  //从该list容器中的position位置处开始,插入n个值为val的元素

    template <class InputIterator>

    void insert (iterator position, InputIterator first, InputIterator last);  //first,last是我们选择的把值插入到这个list中的值所在的容器的迭代器

     1 // inserting into a list
     2 #include <iostream>
     3 #include <list>
     4 #include <vector>
     5 using namespace std;
     6 int main () {
     7     list<int> mylist;
     8     list<int>::iterator it;
     9     // 初始化
    10     for (int i = 1; i <= 5; ++i) mylist.push_back(i); // 1 2 3 4 5
    11     it = mylist.begin();
    12     ++it;       // 迭代器it现在指向数字2                      ^
    13     //在i0t指向的位置出插入元素10
    14     mylist.insert (it,10);                        // 1 10 2 3 4 5
    15 
    16     // "it" 仍然指向数字2                                   ^
    17     //在it指向的位置出插入两个元素20
    18     mylist.insert (it,2,20);                      // 1 10 20 20 2 3 4 5
    19 
    20     --it;       // 现在it指向数字20                             ^
    21 
    22     vector<int> myvector (2,30); //创建vector容器,并初始化为含有2个值为30的元素
    23     //将vector容器的值插入list中
    24     mylist.insert (it,myvector.begin(),myvector.end());
    25                                                 // 1 10 20 30 30 20 2 3 4 5
    26     //it仍然指向数字20                            //               ^
    27     cout << "mylist contains:";
    28     for (it = mylist.begin(); it != mylist.end(); ++it)
    29         cout << ' ' << *it;
    30     cout << '
    ';
    31 
    32     return 0;
    33 }
    输出结果:
    mylist contains: 1 10 20 30 30 20 2 3 4 5
    • erase  //删除元素:

    iterator erase (iterator position);  //删除迭代器position指向的值,也可以不用变量接收其返回值

    iterator erase (iterator first, iterator last);  //删除[first, last)中的值,也可以不用变量接收其返回值

     1 // erasing from list
     2 #include <iostream>
     3 #include <list>
     4 using namespace std;
     5 int main () {
     6     list<int> mylist;
     7     list<int>::iterator it1,it2;
     8 
     9     // set some values:
    10     for (int i = 1; i < 10; ++i) mylist.push_back(i*10);
    11 
    12                                 // 10 20 30 40 50 60 70 80 90
    13     it1 = it2 = mylist.begin(); // ^^
    14     advance (it2,6);            // ^                 ^
    15     ++it1;                      //    ^              ^
    16 
    17     it1 = mylist.erase (it1);   // 10 30 40 50 60 70 80 90
    18                                 //    ^           ^
    19 
    20     it2 = mylist.erase (it2);   // 10 30 40 50 60 80 90
    21                                 //    ^           ^
    22 
    23     ++it1;                      //       ^        ^
    24     --it2;                      //       ^     ^
    25     //没有变量接收其返回值
    26     mylist.erase (it1,it2);     // 10 30 60 80 90
    27                                 //       ^
    28     cout << "*it1 : " << *it1 << endl;
    29     cout << "mylist contains:";
    30     for (it1 = mylist.begin(); it1 != mylist.end(); ++it1)
    31         cout << ' ' << *it1;
    32     cout << '
    ';
    33 
    34   return 0;
    35 }
    输出结果:
    it1 : 40
    mylist contains: 10 30 60 80 90
    • swap  //交换两个list的内容

    void swap(list& x);  //要交换的两个列表的存储的元素的类型必须是一样的,列表大小可以不同

     1 // swap lists
     2 #include <iostream>
     3 #include <list>
     4 using namespace std;
     5 int main () {
     6     list<int> first (3,100);   // 三个值为100的元素
     7     list<int> second (5,200);  // 五个值为200的元素
     8 
     9     first.swap(second);
    10 
    11     cout << "first contains:";
    12     for (list<int>::iterator it = first.begin(); it != first.end(); it++)
    13         cout << ' ' << *it;
    14     cout << '
    ';
    15 
    16     cout << "second contains:";
    17     for (list<int>::iterator it = second.begin(); it != second.end(); it++)
    18         cout << ' ' << *it;
    19     cout << '
    ';
    20 
    21     return 0;
    22 }
    输出结果:
    first contains: 200 200 200 200 200
    second contains: 100 100 100
    • resize  //调整list大小

    void resize (size_type n, value_type val = value_type());  //将list大小调整为能容纳n个元素,若n大于当前list大小,则会从list末尾一直插入val值,直到list大小满足n;

     1 // resizing list
     2 #include <iostream>
     3 #include <list>
     4 using namespace std;
     5 int main () {
     6     list<int> mylist;
     7 
     8     // 初始化
     9     for (int i = 1; i < 10; ++i) mylist.push_back(i);
    10 
    11     mylist.resize(5);
    12     mylist.resize(8,100);
    13     mylist.resize(12);
    14 
    15     cout << "mylist contains:";
    16     for (list<int>::iterator it = mylist.begin(); it != mylist.end(); ++it)
    17         cout << ' ' << *it;
    18     cout << '
    ';
    19 
    20   return 0;
    21 }
    输出结果:
    mylist contains: 1 2 3 4 5 100 100 100 0 0 0 0
    • clear  //清空list

    void clear();  //删除list的所有元素

     1 // clearing lists
     2 #include <iostream>
     3 #include <list>
     4 using namespace std;
     5 int main () {
     6     list<int> mylist;
     7     list<int>::iterator it;
     8 
     9     mylist.push_back (100);
    10     mylist.push_back (200);
    11     mylist.push_back (300);
    12 
    13     cout << "mylist contains:";
    14     for (it = mylist.begin(); it != mylist.end(); ++it)
    15         cout << ' ' << *it;
    16     cout << '
    ';
    17 
    18     mylist.clear();
    19     mylist.push_back (1101);
    20     mylist.push_back (2202);
    21 
    22     cout << "mylist contains:";
    23     for (it = mylist.begin(); it != mylist.end(); ++it)
    24         cout << ' ' << *it;
    25     cout << '
    ';
    26 
    27   return 0;
    28 }
    输出结果:
    mylist contains: 100 200 300
    mylist contains: 1101 2202

    Operations:

    • splice  //将一个list中的值移到另一个list中

    void splice (iterator position, list& x);  //将列表x中的所有元素移到当前list中,从当前列表的position指向的位置开始,此时列表x为空

    void splice (iterator position, list& x, iterator i);  //将列表x中迭代器 i 指向的元素移到当前list的position指向的位置处,由于i指向的元素从列表x中被移除,所以迭代器 i 此时是invalid的;position是当前列表的迭代器,i是列表x的迭代器

    void splice (iterator position, list& x, iterator first, iterator last);  //将列表x中[first, last)的元素移到当前list中,从position指向的位置开始;first, last是列表x的迭代器

     1 // splicing lists
     2 #include <iostream>
     3 #include <list>
     4 using namespace std;
     5 int main () {
     6     list<int> mylist1, mylist2;
     7     list<int>::iterator it;
     8 
     9     // 初始化
    10     for (int i = 1; i <= 4; ++i)
    11        mylist1.push_back(i);      // mylist1: 1 2 3 4
    12 
    13     for (int i = 1; i <= 3; ++i)
    14        mylist2.push_back(i*10);   // mylist2: 10 20 30
    15 
    16     it = mylist1.begin();
    17     ++it;                         // 指向数字2
    18 
    19     mylist1.splice (it, mylist2); // mylist1: 1 10 20 30 2 3 4
    20                                   // mylist2 (empty)
    21                                   // "it" 仍然指向数字2
    22 
    23     mylist2.splice (mylist2.begin(),mylist1, it);
    24                                 // mylist1: 1 10 20 30 3 4
    25                                 // mylist2: 2
    26                                 // "it" 此时已经无效了
    27     it = mylist1.begin();
    28     advance(it,3);           // "it" 指向数字30
    29 
    30     mylist1.splice ( mylist1.begin(), mylist1, it, mylist1.end());
    31                                 // mylist1: 30 3 4 1 10 20
    32 
    33     cout << "mylist1 contains:";
    34     for (it = mylist1.begin(); it != mylist1.end(); ++it)
    35         cout << ' ' << *it;
    36     cout << '
    ';
    37 
    38     cout << "mylist2 contains:";
    39     for (it = mylist2.begin(); it != mylist2.end(); ++it)
    40         cout << ' ' << *it;
    41     cout << '
    ';
    42 
    43   return 0;
    44 }
    输出结果:
    mylist1 contains: 30 3 4 1 10 20
    mylist2 contains: 2
    • remove  //删除list中特定的值

    void remove (const value_type& val);  //从list中删除所有值为val的元素

     1 // remove from list
     2 #include <iostream>
     3 #include <list>
     4 using namespace std;
     5 int main () {
     6     int myints[]= {17, 89, 7, 89, 14};
     7     list<int> mylist (myints,myints+5);
     8 
     9     mylist.remove(89);
    10 
    11     cout << "mylist contains:";
    12     for (list<int>::iterator it = mylist.begin(); it != mylist.end(); ++it)
    13         cout << ' ' << *it;
    14     cout << '
    ';
    15 
    16     return 0;
    17 }
    输出结果:
    mylist contains: 17 7 14
    • remove_if  //按条件删除

    template <class Predicate>

    void remove_if (Predicate pred);  //pred可以是一个函数,也可以是一个class,但它需要有一个参数,且参数类型跟list中存储元素类型相同,满足条件就返回true

     1 // list::remove_if
     2 #include <iostream>
     3 #include <list>
     4 using namespace std;
     5 // a predicate implemented as a function:
     6 bool single_digit (const int& value) { return (value < 10); }
     7 
     8 // a predicate implemented as a class:
     9 struct is_odd {
    10   //重载操作符 ()
    11   bool operator() (const int& value) { return (value % 2) == 1; }
    12 };
    13 
    14 int main () {
    15     int myints[] = {15, 36, 7, 17, 20, 39, 4, 1};
    16     list<int> mylist (myints, myints + 8);   // 15 36 7 17 20 39 4 1
    17 
    18     mylist.remove_if (single_digit);           // 15 36 17 20 39
    19 
    20     mylist.remove_if (is_odd());               // 36 20
    21 
    22     cout << "mylist contains:";
    23     for (std::list<int>::iterator it=mylist.begin(); it!=mylist.end(); ++it)
    24         cout << ' ' << *it;
    25     cout << '
    ';
    26 
    27     return 0;
    28 }
    输出结果:
    mylist contains: 36 20
    • unique  //删除重复值

    void unique();  //只能删除相邻的重复元素,然后保留第一个值,因此这个函数只对排好序的list有用

    template <class BinaryPredicate>

    void unique (BinaryPredicate binary_pred);  //binary_pred可以是函数,也可以是class,但它需要有两个参数,且类型跟list中存储的值类型相同,满足某个条件就返回true

     1 // list::unique
     2 #include <iostream>
     3 #include <cmath>
     4 #include <list>
     5 using namespace std;
     6 // a binary predicate implemented as a function:
     7 bool same_integral_part (double first, double second) { return ( int(first)==int(second) ); }
     8 
     9 // a binary predicate implemented as a class:
    10 struct is_near {
    11     bool operator() (double first, double second) { return (fabs(first-second)<5.0); }
    12 };
    13 
    14 int main () {
    15     double mydoubles[] = { 12.15, 2.72, 73.0, 12.77, 3.14,
    16                        12.77, 73.35, 72.25, 15.3, 72.25 };
    17     list<double> mylist (mydoubles,mydoubles+10);
    18     cout << "mylist contains:";
    19     for (list<double>::iterator it = mylist.begin(); it != mylist.end(); ++it)
    20         cout << ' ' << *it;
    21     cout << '
    ';
    22     
    23     mylist.unique();
    24     cout << "mylist contains:";
    25     for (list<double>::iterator it = mylist.begin(); it != mylist.end(); ++it)
    26         cout << ' ' << *it;
    27     cout << '
    ';
    28 
    29     mylist.sort();             //  2.72,  3.14, 12.15, 12.77, 12.77,
    30                              // 15.3,  72.25, 72.25, 73.0,  73.35
    31 
    32     mylist.unique();           //  2.72,  3.14, 12.15, 12.77
    33                              // 15.3,  72.25, 73.0,  73.35
    34     cout << "mylist contains:";
    35     for (list<double>::iterator it = mylist.begin(); it != mylist.end(); ++it)
    36         cout << ' ' << *it;
    37     cout << '
    ';
    38 
    39     mylist.unique (same_integral_part);  //  2.72,  3.14, 12.15
    40                                        // 15.3,  72.25, 73.0
    41     cout << "mylist contains:";
    42     for (list<double>::iterator it = mylist.begin(); it != mylist.end(); ++it)
    43         cout << ' ' << *it;
    44     cout << '
    ';
    45 
    46     mylist.unique (is_near());           //  2.72, 12.15, 72.25
    47 
    48     cout << "mylist contains:";
    49     for (list<double>::iterator it = mylist.begin(); it != mylist.end(); ++it)
    50         cout << ' ' << *it;
    51     cout << '
    ';
    52 
    53   return 0;
    54 }
    输出结果:
    mylist contains: 12.15 2.72 73 12.77 3.14 12.77 73.35 72.25 15.3 72.25
    mylist contains: 12.15 2.72 73 12.77 3.14 12.77 73.35 72.25 15.3 72.25
    mylist contains: 2.72 3.14 12.15 12.77 15.3 72.25 73 73.35
    mylist contains: 2.72 3.14 12.15 15.3 72.25 73
    mylist contains: 2.72 12.15 72.25
    
    
    • merge  //合并有序的list

    void merge(list &x);  //会将列表x中的元素按默认的顺序移入当前列表当中,此时列表x为空,当前列表仍为有序列表

    template<class Compare>

    void merge (list& x, Compare comp);  //comp可以为一个函数,要求有两个参数且参数类型跟list中存储的元素类型相同,当满足条件时返回true,merge就按照这个条件将两个列表合并

     1 // list::merge
     2 #include <iostream>
     3 #include <list>
     4 using namespace std;
     5 // compare only integral part:
     6 bool mycomparison (double first, double second) { return ( (first)<(second) ); }
     7 
     8 int main () {
     9     list<double> first, second;
    10 
    11     first.push_back (3.1);
    12     first.push_back (2.2);
    13     first.push_back (2.9);
    14 
    15     second.push_back (3.7);
    16     second.push_back (7.1);
    17     second.push_back (1.4);
    18 
    19     first.sort();
    20     second.sort();
    21 
    22     first.merge(second);
    23     cout << "first contains:";
    24     for (list<double>::iterator it = first.begin(); it != first.end(); ++it)
    25         cout << ' ' << *it;
    26     cout << '
    ';
    27     // (second 现在为空)
    28 
    29     second.push_back (2.1);
    30     second.push_back(2.5);
    31 
    32     first.merge(second,mycomparison);
    33     cout << "first contains:";
    34     for (list<double>::iterator it = first.begin(); it != first.end(); ++it)
    35         cout << ' ' << *it;
    36     cout << '
    ';
    37 
    38   return 0;
    39 }
    输出结果:
    first contains: 1.4 2.2 2.9 3.1 3.7 7.1
    first contains: 1.4 2.1 2.2 2.5 2.9 3.1 3.7 7.1

    • sort  //排序

    void sort();  //默认升序排列

    template <class Compare>

    void sort (Compare comp);  //comp可以是一个函数,要求有两个参数,类型跟list中元素类型相同,满足条件时返回true,sort()函数就按照comp中制定的规则对元素进行排序

     1 // list::sort
     2 #include <iostream>
     3 #include <list>
     4 #include <string>
     5 #include <cctype>
     6 using namespace std;
     7 // comparison, not case sensitive.
     8 bool compare_nocase (const string& first, const string& second) {
     9     unsigned int i = 0;
    10     while ((i < first.length()) && (i < second.length()) ) {
    11         //将大写字母转为小写字母
    12         if (tolower(first[i]) < tolower(second[i])) return true;
    13         else if (tolower(first[i]) > tolower(second[i])) return false;
    14         ++i;
    15     }
    16     return ( first.length() < second.length() );
    17 }
    18 
    19 int main () {
    20     list<string> mylist;
    21     list<string>::iterator it;
    22     mylist.push_back ("one");
    23     mylist.push_back ("two");
    24     mylist.push_back ("Three");
    25 
    26     mylist.sort();
    27 
    28     cout << "mylist contains:";
    29     for (it = mylist.begin(); it != mylist.end(); ++it)
    30         cout << ' ' << *it;
    31     cout << '
    ';
    32 
    33     mylist.sort(compare_nocase);
    34 
    35     cout << "mylist contains:";
    36     for (it = mylist.begin(); it != mylist.end(); ++it)
    37         cout << ' ' << *it;
    38     cout << '
    ';
    39 
    40   return 0;
    41 }
    输出结果:
    mylist contains: Three one two
    mylist contains: one Three two
    • reverse  //逆序:

    void reverse();  //将list中元素的顺序逆转过来

     1 // reversing list
     2 #include <iostream>
     3 #include <list>
     4 using namespace std;
     5 int main () {
     6     list<int> mylist;
     7 
     8     for (int i = 1; i < 10; ++i) mylist.push_back(i);
     9 
    10     mylist.reverse();
    11 
    12     cout << "mylist contains:";
    13     for (list<int>::iterator it = mylist.begin(); it != mylist.end(); ++it)
    14         cout << ' ' << *it;
    15     cout << '
    ';
    16 
    17   return 0;
    18 }
    输出结果:
    mylist contains: 9 8 7 6 5 4 3 2 1

    Observers:

    • get_allocator  //返回一个跟该list有关的分配器对象

    allocator_type get_allocator() const;  //可以用来给数组动态分配空间

     1 // list::get_allocator
     2 #include <iostream>
     3 #include <list>
     4 using namespace std;
     5 int main () {
     6     list<int> mylist;
     7     int * p;
     8 
     9     // allocate an array of 5 elements using mylist's allocator:
    10     p = mylist.get_allocator().allocate(5);
    11 
    12     // assign some values to array
    13     for (int i = 0; i < 5; ++i) p[i] = i;
    14 
    15     cout << "The allocated array contains:";
    16     for (int i = 0; i < 5; ++i) cout << ' ' << p[i];
    17     cout << '
    ';
    18 
    19     mylist.get_allocator().deallocate(p,5);
    20 
    21     return 0;
    22 }
    输出结果:
    The allocated array contains: 9 8 7 6 5 4 3 2 1
  • 相关阅读:
    【redis】redis的 key的命名规则
    【redis】存入redis的值,如果为null是否默认不被存入
    【java】StringBuilder的三种清除方法对比
    【java】hash一致性算法的实现区别【标题暂定】
    【java】Java中十六进制转换 Integer.toHexString()到底做了什么?什么时候会用到它?为什么要用它?byte为什么要&0xff?为什么要和0xff做与运算?
    【java】TreeMap/HashMap的循环迭代中 keySet和entrySet和forEach方式 + map的几种迭代方式
    【java】Map、Set、List不同数据结构的各种不同循环迭代的效率对比,使用场景
    【java】安全加密MessageDigest的功能及用法【hash一致性算法】
    hbase分布式集群搭建
    hadoop分布式集群搭建
  • 原文地址:https://www.cnblogs.com/lalalabi/p/5060210.html
Copyright © 2011-2022 走看看