首页 > 编程语言 >关于C++中STL的简单入门(updating)

关于C++中STL的简单入门(updating)

时间:2023-11-07 21:15:17浏览次数:26  
标签:容器 迭代 STL 元素 C++ vector 模板 updating

前言:本篇文章将对STL(标准模板库)进行一个简单的介绍,以方便在算法竞赛中节省时间并方便使用。

C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈。

C++ 标准模板库的核心包括以下三个组件:
1.容器(Containers)容器是用来管理某一类对象的集合。C++ 提供了各种不同类型的容器,比如 deque、list、vector、map 等。
2.算法(Algorithms)算法作用于容器。它们提供了执行各种操作的方式,包括对容器内容执行初始化、排序、搜索和转换等操作。
3.迭代器(iterators)迭代器用于遍历对象集合的元素。这些集合可能是容器,也可能是容器的子集。

正文

  • 1.vector(向量)
    与数组类似,都是用来储存元素的一个容器,不同于数组需要定义元组大小,vector在需要进行扩充空间时自动对数据空间进行扩充,类似于golang里面的切片概念。
    使用vector 需要使用头文件.
    对向量的定义是很简单的,只需要
vector <T> name;//这里的T表示数据类型,name表示向量的名称。

对于vector的访问,有两种方式,一是通过传统的下标访问,与元组类似,从下标0开始访问。另外一种是迭代器来访问,两种访问方式我将在下面介绍

下标访问

for (int i =0;i<n;i++) cout<<name[i]<<" ";

迭代器访问

vector<int>::iterator it=vi.begin();
*(it+i);
for(vector<int>::iterator it=vi.begin();it!=vi.end();it++)
	printf("%d ",*it);
//倒序访问
for(auto it=vi.end()-1;it>=vi.begin();it--)
	printf("%d ",*it);

对于vector,有很多实用的函数可以直接使用,我在下面直接列出来
1.push_back()

在vector后面添加一个元素。当添加的元素同样是vector时,可以用以下方式表示:

vector<vector<int>> res;
res.push_back({left, right})

2.pop_back()

删除vector的尾元素。

3.size()

获得元素个数

4.clear()

清空vector中的元素

5.insert()

insert(it,x)向vector任意迭代器it前插入一个元素x.

6.erase()

erase(it)删除迭代器为it处的元素

erase(first,last)删除[first,last)内的所有元素。

需要注意的是所有erase的做法会使得iterator无效,除非删除的元素在首尾。

7.resize()

定义好后设置size,如v.resize(n+1)

8.back()

直接得到最后一个元素,可以不用写nums[nums.size()-1]
最后对于vector,万能头<bits/stdc++.h>当中已经包含了相关头文件。

标签:容器,迭代,STL,元素,C++,vector,模板,updating
From: https://www.cnblogs.com/NexusXian/p/17815907.html

相关文章

  • 【Cpp 语言基础】C++中的 getline() 函数
    一、string类的getline函数(全局函数)getline(cin,str)函数是处理string类的函数。第二个参数为string类型的变量。读入时第二个参数为string类型,而不是char*,要注意区别     getline()函数的定义如下所示    1.istream&getline(istream&is,string&str,ch......
  • C/C++ __builtin 超实用位运算函数总结
    以__builtin开头的函数,是一种相当神奇的位运算函数,下面本人盘点了一下这些以__builtin开头的函数,希望可以帮到大家。1__builtin_ctz()/__buitlin_ctzll()用法:返回括号内数的二进制表示数末尾0的个数//eg:#include<bits/stdc++.h>usingnamespacestd;intmain......
  • c++右值引用、移动语义、完美转发
    1. 左值、右值、左值引用以及右值引用左值:一般指的是在内存中有对应的存储单元的值,最常见的就是程序中创建的变量右值:和左值相反,一般指的是没有对应存储单元的值(寄存器中的立即数,中间结果等),例如一个常量,或者表达式计算的临时变量intx=10inty=20intz=x+y//x......
  • Windows10+VSCode+CMake+shell脚本编译C/C++程序
    一、概述想要在Windows10上做C++验证/编译类库,借助VSCode(其实这东西要不要都行,它就是来方便查看代码的)+CMake+shell脚本做程序的编译运行。下面写一个小例子记录一下准备工作:1.编译环境用的是mingw64,使用其再带的g++编译,ps:记得要配置其环境变量2......
  • 【01】安装与配置 C++/Visual Studio 22 | PDCurses on Windows
    参考:https://www.cnblogs.com/yapingxin/p/15936414.html实践、概括、优化:编译生成下载源码,解压后进入其中的wincon目录;如果需要为多个Platform(x86和x64)以及多个分支(Debug和Release),多复制备份几个wincon文件夹,分别命名好;编辑其中的Makefile.vc文件,在11行下新建一行,写入:PL......
  • 11 个最佳 C++ IDE(和代码编辑器)
    C++是一种功能强大、用途广泛的编程语言。它也可以是一个艰难的大师。这意味着在您的工具带中拥有正确的工具以帮助您更高效、更有效、更自信地编写代码至关重要。在为C++编程寻找最佳IDE或代码编辑器时,您应该从哪里开始?IDE选项列表几乎是无限的,很难判断哪个是最适合您的软......
  • C++中的高阶函数 -- std::function实现回调
    C++中的高阶函数:以std::function优雅地实现回调1.简介1.1C++高阶函数的概念在函数式编程语言中,高阶函数(Higher-orderFunction)是一个常见的概念,它通常被定义为满足下列条件之一的函数: 接受一个或多个函数作为输入(参数)输出(返回值)是一个函数C++作为一门多范式编程语言,也......
  • C++ lambda函数总结
    C++lambda函数1lambda函数简介名称lambda来自lambdacalculus(lambda演算),一种定义和应用函数的数学系统。这个系统中可以使用匿名函数,对于接收函数指针或伪函数的函数,可以使用匿名函数定义(lambda)作为其参数。1.1为什么使用lambda函数?距离:定义位于使用的地方附近很有用,由于......
  • Microsoft Visual C++ 14.0 is required.
    问题:配置detectron2的时候报错,MicrosoftVisualC++14.0isrequired.解决:按照上面的网址去下载MicrosoftC++BulidTools这个工具,安装对应的包即可 ......
  • C++禁用windows全局鼠标
    禁用全局鼠标的实现方式与禁用键盘类似,也是通过使用WindowsAPI函数来创建钩子来截取鼠标消息,然后在钩子函数中阻止特定鼠标事件的执行。下面是一个使用C++和WindowsAPI来禁用全局鼠标的示例代码:#include<iostream>#include<Windows.h>//定义全局的钩子句柄HHOOKmouseHook......