STL库

1、Vector

在创建一个vector 后,它会自动在内存中分配一块连续的内存空间进行数据存储,初始的空间大小可以预先指定也可以由vector 默认指定。当存储的数据超过分配的空间时vector 会重新分配一块内存块,但这样的分配是很耗时的,在重新分配空间时它会做这样的动作:

①vector 会申请一块更大的内存块;

②将原来的数据拷贝到新的内存块中;

③销毁掉原内存块中的对象(调用对象的析构函数);

④将原来的内存空间释放掉。

遍历方式:数组下标、迭代器遍历

 1 int main() {
 2     vector<int> vec;
 3     vec.push_back(1);
 4     vec.push_back(2);
 5     vec.push_back(3);
 6 
 7     cout << "向量的大小为" << vec.size() << endl;
 8 
 9     //数组下标方式遍历
10     for (int i = 0; i < vec.size(); i++) {
11         cout << vec[i] << endl;
12     }
13 
14     //迭代器遍历
15     vector<int>::iterator it = vec.begin();
16     for (; it != vec.end(); it++) {
17         cout << *it<< endl;
18     }
19     system("PAUSE");
20     return 0;
21 }

 2、双向链表List

对于一个双向链表来说主要包括3个:指向前一个链表节点的前向指针、有效数据、指向后一个链表节点的后向指针

List VS Vector

优点:

①动态的分配内存,当需要添加数据的时候不会像vector那样,先将现有的内存空间释放,在次分配更大的空间,这样的话效率就比较低了。

②支持内部插入、头部插入和尾部插入

缺点:不能随机访问,不支持[]方式和vector.at()、占用的内存会多于vector(非有效数据占用的内存空间)

int main() {
    list<int> ll;

    //插入元素
    ll.push_back(1);//尾部插入
    ll.push_front(2);//头部插入
    ll.insert(ll.begin(), 3);//开始位置插入
    ll.insert(ll.end(), 4);//结束位置插入

    cout << "链表是否为空" << ll.empty() << endl;
    cout << "list链表中元素个数" << ll.size() << endl;
    cout << "list链表第一个元素" << ll.front() << endl;
    cout << "list链表最后一个元素" << ll.back() << endl;

    //遍历链表 正向
    cout << "正向" << ' ';
    list<int>::iterator it = ll.begin();
    for (; it != ll.end(); it++) {
        cout << *it << ' ';
    }
    cout << endl;

    //遍历链表 逆向
    cout << "逆向" << ' ';
    list<int>::reverse_iterator reit = ll.rbegin();
    for (; reit != ll.rend();reit++) {
        cout << *reit << ' ';
    }
    cout << endl;

    //链表排序
    cout << "链表排序" << ' ';
    ll.sort();
    it = ll.begin();
    for (; it != ll.end(); it++) {
        cout << *it << ' ';
    }
    cout << endl;

    //清楚容器中的所有元素
    ll.clear();
    cout << "清楚容器后链表的大小:" << ll.size() << endl;
    system("PAUSE");
    return 0;
}

运行结果

3、Map

Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完全有可能在我们处理一对一数据的时候,在编程上提供快速通道。map内部自建一颗红黑树(一 种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的。

遍历方式:[键值],迭代器

int main() {

    map<int, string> m1 = { {1,"广州"},{2,"深圳"},{3,"长沙"} };
    map<char, string> m2;

    pair<char, string> p1('G', "guangzhou");
    pair<char, string> p2('S', "shenzhen");
    pair<char, string> p3('C', "changsha");

    m2.insert(p1);
    m2.insert(p2);
    m2.insert(p3);

    cout << "m1元素的个数为" << m1.size() << endl;
    cout << "m2元素的个数为" << m2.size() << endl;

    //采用[键值]方式打印数据
    cout << m1[1] << endl;
    cout << m2['G'] << endl;

    //迭代器正向方式遍历
    cout << "正向遍历m1:" << ' ';
    map<int, string>::iterator it = m1.begin();
    for (; it != m1.end(); it++) {
        cout <<it->first<< ',';
        cout << it->second << ' ';
    }
    cout << endl;
    
    //迭代器反向方式遍历
    cout << "反向遍历m1:" << ' ';
    map<int, string>::reverse_iterator reit = m1.rbegin();
    for (; reit != m1.rend();reit++) {
        cout << reit->first << ',';
        cout << reit->second << ' ';
    }
    cout << endl;

    //清空容器
    m1.clear();
    m2.clear();
    cout << "清空容器后m1元素的个数为" << m1.size() << endl;
    cout << "清空容器后m2元素的个数为" << m2.size() << endl;

    system("PAUSE");
    return 0;
}

 

转载于:https://www.cnblogs.com/oldyogurt/p/9121319.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值