zoukankan      html  css  js  c++  java
  • C++ STL@ list 应用 (leetcode: Rotate Array)

    STL中的list就是一双向链表,可高效地进行插入删除元素。 List 是 C++标准程式库 中的一个  ,可以简单视之为双向 连结串行 ,以线性列的方式管理物件集合。list 的特色是在集合的任何位置增加或删除元素都很快,但是不支持随机存取。list 是 C++标准程式库 提供的众多容器(container)之一,除此之外还有 vector 、set、map、…等等。list 以模板方式实现(即泛型),可以处理任意型别的变量,包括使用者自定义的资料型态,例如:它可以是一个放置整数(int)型态的 list、也可以是放置字串(char 或 string)型态的 list、或者放置使用者自定类别(user-defined class)的 list。 

    list 被定义在 <list> 标头档中。一如其他STL元件,list属于std名称空间。

    list 内部以 数据结构 的双向 连结串行 实做,内部元素并非放置于连续大块内存中,而是散落于内存各处,互相以link串接起来,每个元素都只知道其前一个元素以及下一个元素的位置。故要走访整个list,必须从第一个元素开始逐个往下寻访,不支持随机存取(Random Access)。 list 的强项是高效的插入以及删除,于list插入或删除时只需要改动元素的link字段,不需要搬动元素,代价相对便宜。

    list 在经常需要于集合内部任意位置(即除了头尾以外的其他位置) 频繁增删元素的工作上表现优秀。若仅需要于集合尾端增删元素,那应该优先考虑 vector 容器,若仅于头尾二端增删元素,那应该优先考虑 deque 容器。

    成员函数概观
    Iterators:
    list.begin() 回传指向第一个元素的 Iterator。
    list.end() 回传指向最末元素的下一个位置的 Iterator。
    list.rbegin() 回传指向最末个元素的反向 Iterator。
    list.rend() 回传指向第一个元素的前一个位置的反向 Iterator。
    
    Capacity/Size:
    list.empty() 若list内部为空,则回传true值。
    list.size() 回传list内实际的元素个数。
    lsit.resize() 重新分派list的长度。
    
    Element Access
    list.front() 存取第一个元素。
    list.back() 存取最末个元素。
    
    Modify methods
    list.push_front() 增加一个新的元素在 list 的前端。
    list.pop_front() 删除 list 的第一个元素。
    list.push_back() 增加一个新的元素在 list 的尾端。
    list.pop_back() 删除 list 的最末个元素。

    leetcode: Rotate Array

    class Solution {
    public:
        void rotate(vector<int>& nums, int k) {
            if(nums.size() == 0 || nums.size() == 1) return;
            
            list<int> ls; ls.clear();
            list<int>::iterator pt;
            
            for(int i=0;i<nums.size();++i) ls.push_back(nums[i]);
            
            int i=1;
            k%=nums.size();
            while(i <= k) {
                int rear = ls.back();
                ls.pop_back();
                ls.push_front(rear);
                ++i;
            }
            
            int idx = 0;
            for(pt=ls.begin();pt!=ls.end();++pt) nums[idx++] = *pt;
        }
    };
    View Code


  • 相关阅读:
    要么优秀,要么负责阅读作业二感想
    Python核心编程学习日记之数字,序列
    Python核心编程学习日记之错误处理
    Python核心编程学习日记之语法和对象
    Innobakcupex 代码解析
    通过initconnect + binlog 实现MySQL审计功能
    关于Relay Log无法自动删除的问题
    MySQL中 timeout相关参数解析
    慢查询日志中出现超大时间的案例分析
    主键乱序插入对Innodb性能的影响
  • 原文地址:https://www.cnblogs.com/fu11211129/p/4960408.html
Copyright © 2011-2022 走看看