• C++容器和算法


    转自:http://www.cnblogs.com/haiyupeter/archive/2012/07/29/2613145.html

    容器:某一类型数据的集合。

    C++标准顺序容器包括:vector,list,queue

    容器初始化

    复制代码
            vector<int> t;
            for (int i = 0; i < 50; i ++) {
                    t.push_back(i);
            }
    
            vector<int> c; // 空容器
            vector<int> c1(t); // 容器t的副本
            vector<int> c2(3, 4); // 3个值为4的容器
            vector<int> c3(t.begin(), t.end() - 10); // 容器t的begin()和end()-10之前的数据副本
            vector<int> c4(5); // 创建包含5个空默认值的副本
    复制代码

    容器类型的规则:支持复制和赋值操作

    容器的迭代访问

    窗口的迭代访问非常类似指针的操作,都支持++和--的位移操作,迭代器内置了操作符重载。

    复制代码
    *item
    item->num
    ++item
    item++
    --item
    item--
    iter1 == iter2
    iter1 != iter2
    复制代码

    迭代器访问

    复制代码
    for (vector<string>::iterator iter = strs2.begin(); iter != strs2.end(); iter ++) {
            std::cout << *iter << std::endl;
        }
    复制代码

    迭代器的首元素迭代器和尾元素迭代器可以通过begin()和end()方法获取,并通过++方法进行迭代。

    迭代器操作的API:

    Iterators:

    Member types

    member typedefinition
    reference Allocator::reference
    const_reference Allocator::const_reference
    iterator Random access iterator
    const_iterator Constant random access iterator
    size_type Unsigned integral type (usually same as size_t)
    difference_type Signed integral type (usually same as ptrdiff_t)
    value_type T
    allocator_type Allocator
    pointer Allocator::pointer
    const_pointer Allocator::const_pointer
    reverse_iterator reverse_iterator<iterator>
    const_reverse_iterator reverse_iterator<const_iterator>

    增加和删除元素

    容器的API提供在具体什么位置增加或者删除元素,或者在什么元素增加或者删除元素:

    Modifiers:

    容器大小

    Capacity:

    关联容器

    C++中的关联容器包括 map 和 set
    map与key, value相对应,整合起来map与pair类型对应
    set 直接与 value相对应
     
    同时存在multimap和multiset两个对象,支持一个key对应多个value
    具体可以参考:

     

    C++的容器算法

    最常见的是find方法,C++中的示例:

    // 包含必要的头文件

    #include <algorithm>

    复制代码
    vector<int> vec(2, 35);
    vec.push_back(8);
    vec.push_back(80);
    vec.push_back(98);
    vec.push_back(25);
    vec.push_back(12);
    vector<int>::const_iterator result = find(vec.begin(), vec.end(), 80);
    std::cout << 80 << (result == vec.end() ? " is not present" : " is present") << std::endl;
    复制代码

    除了少数情况下,C++的容器算法都是在一个范围内的元素进行操作。所以其参数顺序情况一般为:iter_begin, iter_end, search_value。

    C++容器使用的算法与数据结构书中大致相同:

    1. 只读算法(查找)

    2. 写算法(排序)

    3. 合并

    4. 堆

    5. 最大/最小值等

    常用只读算法:

    ....

    实践了fill, fill_n, back_inserter, copy, replace, sort, count_if

    复制代码
    #include <iostream>
    #include <string>
    #include <vector>
    #include <algorithm>
    #include <iterator>
    using namespace std;
    void log(std::string log) {
        std::cout << log << std::endl;
    }
    void apiTest() {
    }
    int main()
    {
        vector<int> vec(2, 10);
        vec.push_back(3);
        vec.push_back(4);
        vec.push_back(15);
        vec.push_back(45);
        vec.push_back(24);
        vec.push_back(234);
        fill(vec.begin() + 1, vec.end() - 2,3);
        fill_n(back_inserter(vec), 10, 2);
        replace(vec.end() - 5, vec.end(), 2, 8);
        vector<int>::const_iterator iter = vec.begin();
        for (;iter != vec.end();iter++) {
            std::cout << *iter << std::endl;
        }
        vector<int> vec2;
        copy(vec.begin(), vec.end(), back_inserter(vec2));
        return 0;
    }
    复制代码

    输出结果:

    关于容器算法相关一章可参考:http://www.cplusplus.com/reference/algorithm/

  • 相关阅读:
    [leetcode]Largest Number
    [leetcode]Second Highest Salary
    [leetcode]Combine Two Tables
    [leetode]Binary Search Tree Iterator
    [leetcode]Excel Sheet Column Number
    [leetcode]Two Sum III
    [leetcode]Majority Element
    Mysql5.7.26解压版(免安装版)简单快速配置步骤,5分钟搞定(win10-64位系统)
    APP移动端自动化测试工具选型“兵器谱”一览(主流开源工具)
    Jmeter+jenkins如何快速搭建接口和性能测试持续集成解决方案-[基于windows篇]
  • 原文地址:https://www.cnblogs.com/heyonggang/p/3257140.html
Copyright © 2020-2023  润新知