stl

C++之STL迭代器

别来无恙 提交于 2020-02-17 11:26:11
迭代器是一种检查容器内元素并遍历元素的数据类型。可以替代下标访问vector对象的元素。 每种容器类型都定义了自己的迭代器类型,如 vector: vector< int>::iterator iter; 这符语句定义了一个名为 iter 的变量,它的数据类型是 vector<int> 定义的 iterator 类型。每个标准库容器类型都定义了一个名为 iterator 的成员,这里的 iterator 与迭代器实际类型的含义相同。 begin 和 end 操作 每种容器都定义了一对命名为 begin 和 end 的函数,用于返回迭代器。如果容器中有元素的话,由 begin 返回的迭代器指向第一个元素: vector< int>::iterator iter = ivec.begin(); 上述语句把 iter 初始化为由名为 vector 操作返回的值。假设 vector 不空,初始化后,iter 即指该元素为 ivec[0]。由 end 操作返回的迭代器指向 vector 的“末端元素的下一个”。表明它指向了一个不存在的元素。如果 vector 为空,begin 返回的迭代器与 end 返回的迭代器相同。由 end 操作返回的迭代器并不指向 vector 中任何实际的元素,相反,它只是起一个哨兵(sentinel)的作用,表示我们已处理完 vector 中所有元素。 【备注

[C++ STL] vector使用详解

允我心安 提交于 2020-02-17 09:23:16
一、概述 vector(向量): 是一种序列式容器,事实上和数组差不多,但它比数组更优越。一般来说数组不能动态拓展,因此在程序运行的时候不是浪费内存,就是造成越界。而vector正好弥补了这个缺陷,它的特征是相当于可分配拓展的数组(动态数组),它的随机访问快,在中间插入和删除慢,但在末端插入和删除快。 二、定义及初始化 使用之前必须加相应容器的头文件: #include <vector> // vector属于std命名域的,因此需要通过命名限定,例如using std::vector; 定义的实现代码如下: vector<int> a; // 定义一个int类型的向量a vector<int> a(10); // 定义一个int类型的向量a,并设置初始大小为10 vector<int> a(10, 1); // 定义一个int类型的向量a,并设置初始大小为10且初始值都为1 vector<int> b(a); // 定义并用向量a初始化向量b vector<int> b(a.begin(), a.begin()+3); // 将a向量中从第0个到第2个(共3个)作为向量b的初始值 除此之外,还可以直接使用数组来初始化向量: int n[] = {1, 2, 3, 4, 5} ; // 将数组n的前5个元素作为向量a的初值 // 说明:当然不包括arr[4]元素

C++面试笔试——STL

心已入冬 提交于 2020-02-17 06:59:19
STL(Standard Template Library,标准模版库)主要由容器(container)、迭代器(iterator)和算法(algorithm)三部分组成,其中封装了数据结构中的大部分内容。 STL中sort函数:直接使用sort迭代器进行排序。 #include<iostream> #include<algorithm> using namespace std; int main(){ int a[]={1,9,-5,0,9,45,2}; sort(a,a+7); for(int i=0;i<7;i++){ cout<<a[i]<<endl; } return 0; } #include<iostream> #include<algorithm> using namespace std; int main(){ string s="452155641321789"; sort(s.begin(),s.end()); cout<<s<<endl; return 0; } int main(){ string s="452155641321789"; sort(s.begin(),s.end()); cout<<s<<endl; s.erase(s.begin()); //清楚掉字符串首字母 cout<<s<<endl; s.erase(--s.end()); /

STL迭代器

六月ゝ 毕业季﹏ 提交于 2020-02-16 11:21:13
迭代器 迭代器(iterator)是一种抽象的设计概念,现实程序语言中并没有直接对应于这个概念的实物。在<>一书中提供了23中设计模式的完整描述,其中iterator模式定义如下:提供一种方法,使之能够依序寻访某个容器所含的各个元素,而又无需暴露该容器的内部表示方式。迭代器的设计思维-STL的关键所在,STL的中心思想在于将容器(container)和算法(algorithms)分开,彼此独立设计,最后再一贴胶着剂将他们撮合在一起。 迭代器的种类: 输入迭代器 提供对数据的只读访问 只读,支持++、==、!= 输出迭代器 提供对数据的只写访问 只写,支持++ 前向迭代器 提供读写操作,并能向前推进迭代器 读写,支持++、==、!= 双向迭代器 提供读写操作,并能向前和向后操作 读写,支持++、–, 随机访问迭代器 提供读写操作,并能以跳跃的方式访问容器的任意数据,是功能最强的迭代器 读写,支持++、–、[n]、-n、<、<=、>、>= 举个例子: # include <iostream> # include <vector> # include <algorithm> # define _CRT_SECURE_NO_WARNINGS using namespace std ; // STL中的容器算法迭代器 void test01 ( ) { vector < int > v ;

STL之vector

China☆狼群 提交于 2020-02-16 08:32:04
1.简介 # 容器vector表示 对象的集合 ,其中所有 对象的类型 相同。 vector能容纳绝大多数类型的对象作为元素,但引用不是对象,所以不存在包含引用的vector。 集合中每个对象都有一个对应的索引,索引用于访问对象,即vector可以使用下标访问vector的元素。 # vector和array的关系 vector和array相似,均可以使用下标访问元素。 vector理解为动态数组,vector可以根据需要随时调整自身大小以便容纳更多元素。 # vector头文件 1 #include<vector> 2.成员函数 3.code实例 1 #include<iostream> 2 #include<vector> 3 using namespace std; 4 5 int main() 6 { 7 int vector_fun(); 8 vector_fun(); 9 10 system("pause"); 11 return 0; 12 } 13 14 int vector_fun() 15 { 16 // 创建一维向量 17 //vector<int> v1_int; 18 19 // 创建并初始化一维向量 20 vector<int> v1_int; 21 22 // 尾部插入 23 v1_int.push_back(1); 24 v1_int.push

STL Vector的使用

隐身守侯 提交于 2020-02-14 17:43:21
数组作为基本的数据结构,有静态数组和动态数组两种类型。比赛中,空间足够,能用静态数组就静态,不然就用vector,最后才是用指针管理动态数组。 vector是一个模板类,其中的元素连续存储。 使用方法如下: 定义:常用的定义方法如下: 例子 说明 vector a; 默认初始化,a空 vector b(a); 用a定义b vector a(100); a有100个默认初始化为0的元素 vector a(100, -1); a用100个值为-1的元素 vector a(100, “hello”); a有100个值为"hello"的元素 vector a; a可以保存自定义的结构体类型 常见操作方法: 例子 说明 a.push_back(100); 尾部插入一个元素 a.emplace_back(100); 尾部构造一个元素 a.size() 元素个数 bool a.empty() 是否为空 a.insert(a.begin() + i, k); 插入一个元素 a.insert(a.end(), k, j); 在尾部插入k个值为j的元素 a.pop_back(); 删除尾部 a.erase(a.begin() + i, a.end() + j); 删除区间 a.erase(a.begin() + i); 删除元素 a.resize(n); 调整大小 a.clear(); 清空

STL练习-排列2

痞子三分冷 提交于 2020-02-14 11:13:39
Ray又对数字的列产生了兴趣: 现有四张卡片,用这四张卡片能排列出很多不同的4位数,要求按从小到大的顺序输出这些4位数。 Input 每组数据占一行,代表四张卡片上的数字(0<=数字<=9),如果四张卡片都是0,则输入结束。 Output 对每组卡片按从小到大的顺序输出所有能由这四张卡片组成的4位数,千位数字相同的在同一行,同一行中每个四位数间用空格分隔。每组输出数据间空一行,最后一组数据后面没有空行。 Sample Input 1 2 3 4 1 1 2 3 0 1 2 3 0 0 0 0 Sample Output 1234 1243 1324 1342 1423 1432 2134 2143 2314 2341 2413 2431 3124 3142 3214 3241 3412 3421 4123 4132 4213 4231 4312 4321 1123 1132 1213 1231 1312 1321 2113 2131 2311 3112 3121 3211 1023 1032 1203 1230 1302 1320 2013 2031 2103 2130 2301 2310 3012 3021 3102 3120 3201 3210 1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4

c++的STL基本用法

好久不见. 提交于 2020-02-14 08:19:57
vector容器 直接上例子,便于复习。 # include <vector> # include <iostream> using namespace std ; bool comp ( const int & a , const int & b ) { return a > b ; } int main ( ) { vector < int > vec ; vec . push_back ( 10 ) ; vec . push_back ( 20 ) ; vec . push_back ( 30 ) ; vector < int > :: iterator vecit ; cout << "初始" ; for ( vecit = vec . begin ( ) ; vecit != vec . end ( ) ; vecit ++ ) //iterator的用法 { cout << * vecit << " " ; } cout << "求和" << accumulate ( vec . begin ( ) , vec . end ( ) , 0 ) << endl ; //求和 vec . insert ( vec . begin ( ) , 1 ) ; //插入 vec . insert ( vec . end ( ) , 40 ) ; vec . erase ( vec

C++中STL的容器适配器以及各容器的方法

空扰寡人 提交于 2020-02-13 17:51:38
一.容器适配器 1.stack 需要引入的头文件: #include<stack> 初始化方式: stack<int> stk; 成员函数介绍: stk.empty(); //判断stack是否为空,为空返回true,否则返回false stk.size(); //判断stack中元素的个数 stk.pop(); //删除栈顶元素,但不返回其值 stk.top(); //返回栈顶元素的值,但不删除此元素 stk.push(item) //在栈顶压入新元素item 2.queue 需要引入的头文件: #include<queue>; 初始化方式: queue<int> q; 成员函数介绍: q.empty(); //判断队列是否为空 q.size(); //返回队列长度 q.push(item); //对于queue,在队尾压入一个新元素 //对于priority_queue,在基于优先级的适当位置插入新元素 q.front(); //返回队首元素的值,但不删除该元素 q.back(); //返回队尾元素的值,但不删除该元素 q.top(); //返回具有最高优先级的元素值,但不删除该元素 二、常用容器用法介绍 1.vector 需要引入的头文件: #include<vector> using namespace std; 初始化方式: vector<int>obj; 成员函数介绍:

STL学习记录:链表

寵の児 提交于 2020-02-13 12:22:48
直接百度链表的话,其实和真正用起来的STL链表差的挺远的(毕竟有些情况能用就行~),还是自己写一下记录一下STL里链表具体用法吧 #include <bits/stdc++.h> using namespace std; int main () { //1. 定义 //list<数据类型> 链表名称 list<int> test; list<int>::iterator iter=test.begin(); //2. 增删改查 //增加 test.push_front(1); //向头部增加元素 test.push_back(10); //向尾部增加元素 test.insert(iter,2,3); //向指定位置(迭代器位置)增加几个元素 //删除 test.pop_back(); //删除尾部元素 test.pop_front(); //删除头部元素 test.remove(1); //删除特定元素 test.unique(); //删除相邻重复元素 test.clear(); //改 test.sort(); //排序 test.reverse(); //反转 //查 test.empty(); //如果空链表,返回值为真 int howmany2=count(test.begin(),test.end(),2); //查有多少个2 iter=find(test.begin(