vector与list的区别与应用?

vector与list的区别与应用?以及怎么找到某vector或者list的倒数第二个元素?

vector和list的区别可以类比数组和链表的区别:

vector和数组类似,vector是一个在内存中连续存放且可以自动增长的容器,因此支持随机访问,随机访问的时间复杂度是O(1),跟数组类型。因为是连续存放的,因此插入和删除元素的时间复杂度较高(除了在尾部进行插入和删除),原因是插入元素需要将该位置的元素后面的所有元素都移动出一格来存放该插入元素,删除就要将该位置后面的元素往前挪,因此其为O(n)。

list是由双向链表实现的,双向链表就是结点有三个成员,分别是当前结点的值,指向上一个结点的指针以及指向下一个结点的指针。我们知道链表不支持随机访问,访问一个结点的数据的时间复杂度为O(n),要找的结点需要从当前位置向前或者向后遍历出来,而不能随机访问。但是list很适合插入和删除一个结点,只需要改变指针的指向就可以了,时间复杂度为O(1)。

访问vector倒数第二个元素:

///<vector
std::vector<int > v{1, 2, 3, 4, 5};
int len = v.size();
std::cout << v[len-2] << std::endl;


///<list
//list是双向链表不能直接随机访问
#include <iostream>
#include <list>

int main() {
    std::list<int> myList {1, 2, 3, 4, 5};

    if(myList.size() >= 2) {
        std::list<int>::reverse_iterator rit = myList.rbegin();
        ++rit;  // 移动迭代器到倒数第二个元素
        std::cout << "倒数第二个元素是:" << *rit << std::endl;
    } else {
        std::cout << "列表元素不足两个。" << std::endl;
    }

    return 0;
}
相关推荐
C++忠实粉丝2 小时前
前缀和(8)_矩阵区域和
数据结构·c++·线性代数·算法·矩阵
ZZZ_O^O3 小时前
二分查找算法——寻找旋转排序数组中的最小值&点名
数据结构·c++·学习·算法·二叉树
代码雕刻家3 小时前
数据结构-3.9.栈在递归中的应用
c语言·数据结构·算法
Kalika0-05 小时前
猴子吃桃-C语言
c语言·开发语言·数据结构·算法
代码雕刻家5 小时前
课设实验-数据结构-单链表-文教文化用品品牌
c语言·开发语言·数据结构
小字节,大梦想7 小时前
【C++】二叉搜索树
数据结构·c++
我是哈哈hh7 小时前
专题十_穷举vs暴搜vs深搜vs回溯vs剪枝_二叉树的深度优先搜索_算法专题详细总结
服务器·数据结构·c++·算法·机器学习·深度优先·剪枝
丶Darling.8 小时前
LeetCode Hot100 | Day1 | 二叉树:二叉树的直径
数据结构·c++·学习·算法·leetcode·二叉树
labuladuo5208 小时前
Codeforces Round 977 (Div. 2) C2 Adjust The Presentation (Hard Version)(思维,set)
数据结构·c++·算法
Indigo_code8 小时前
【数据结构】【链表代码】合并有序链表
数据结构·windows·链表