当前位置:首页 >> 高等教育 >> c++ stl简单用法

c++ stl简单用法


C++ STL Adaptor stack 和 queue 的使用 1.Stack top()返回栈顶元素,并不移除这个元素 empty()如果栈空返回 true,否则 false size()栈的大小 void push()插入元素到栈顶 void pop()移除栈顶元素 #include<iostream> #include<stack> using namespace std; void main() { stack<char> v; for(int i=0;i<10;i++) v.push(i+97); cout<<v.size()<<endl; while(!v.empty()) { cout<<v.top()<<" "; v.pop(); } } 2.queue empty()判空 front()返回队头元素 pop()删除对头元素 back()返回队尾元素 push()在队尾加入元素 size()大小 #include<iostream> #include<queue> using namespace std; int main() { queue<int>q; for(int i=0;i<5;i++)q.push(i); while(!q.empty()) //or while(q.size()) { cout<<q.front(); q.pop(); } return 0; }

//树的非递归遍历,层次遍历什么的,不用自己再写栈和队列了,直接利用 STL 中的就行了

头文件: #include <algorithm> using namespace std; 1.默认的 sort 函数是按升序排。对应于 1) sort(a,a+n); //两个参数分别为待排序数组的首地址和尾地址 2.可以自己写一个 cmp 函数,按特定意图进行排序。对应于 2) 例如: int cmp( const int &a, const int &b ){ if( a > b ) return 1; else return 0; } sort(a,a+n,cmp); 是对数组 a 降序排序 又如: int cmp( const POINT &a, const POINT &b ){ if( a.x < b.x ) return 1; else if( a.x == b.x ){ if( a.y < b.y ) return 1; else return 0; } else return 0; } sort(a,a+n,cmp); 是先按 x 升序排序,若 x 值相等则按 y 升序排

与此类似的还有 C 中的 qsort,以下同附上 qsort 的使用方法: #include <stdlib.h>

格 式 qsort(array_name,data_number,sizeof(data_type),co mpare_function_name) (void*)bsearch (pointer_to_key_word,array_name,find_number, sizeof(data_type),compare_function_name) e.g. int Cmp(const void*a,const void *b) { int*pa=(int*)a,*pb=(int*)b; if(*pa>*pb) return 1; else if (*pa==*pb) return 0; else return -1; } qsort(data,N,sizeof(int),Cmp); // 对 int 型数组进行快速 排序(非降序排列) p=(int*)bsearch(&a,data,n,sizeof(int),Cmp);
bool compare(int a,int b) { return a<b; //升序排列,如果改为 return a>b,则为降序 }

标准库 Vector 类型 使用需要的头文件: #include <vector> Vector:Vector 是一个类模板。不是一种数据类型。 Vector<int>是一种数据类型。

一、 定义和初始化 Vector<T> v1; //默认构造函数 v1 为空

Vector<T> v2(v1);//v2 是 v1 的一个副本 Vector<T> v3(n,i);//v3 包含 n 个值为 i 的元素 Vector<T> v4(n); //v4 含有 n 个值为 0 的元素 二、 值初始化 1> 如果没有指定元素初始化式,标准库自行提供一个初始化值进行值初始化。

2> 3>

如果保存的式含有构造函数的类类型的元素,标准库使用该类型的构造函数初始化。 如果保存的式没有构造函数的类类型的元素,标准库产生一个带初始值的对象,使用

这个对象进行值初始化。 三、Vector 对象最重要的几种操作 1. 2. 3. 4. 5. 6. 7. v.push_back(t) v.size() v.empty() v[n] v1=v2 v1==v2 !=、<、<=、>、>= 在数组的最后添加一个值为 t 的数据 当前使用数据的大小 判断 vector 是否为空 返回 v 中位置为 n 的元素 把 v1 的元素替换为 v2 元素的副本 判断 v1 与 v2 是否相等 保持这些操作符惯有含义

vector 容器类型 vector 容器是一个模板类, 可以存放任何类型的对象 (但必须是同一类对 象)。vector 对象可以在运行时高效地添加元素,并且 vector 中元素是连续存 储的。 vector 的构造 函数原型: template<typename T> explicit vector(); // 默认构造函数,vector 对象为空 // 创建有 n 个元素的

explicit vector(size_type n, const T& v = T()); vector 对象 vector(const vector& x); vector(const_iterator first, const_iterator last);

注:vector 容器内存放的所有对象都是经过初始化的。如果没有指定存储对 象的初始值, 那么对于内置类型将用 0 初始化, 对于类类型将调用其默认构造函 数进行初始化(如果有其它构造函数而没有默认构造函数,那么此时必须提供元 素初始值才能放入容器中)。 举例:

vector<string> v1; vector<string> v2(10); 对象的容器

// 创建空容器,其对象类型为 string 类 // 创建有 10 个具有初始值(即空串)的 string 类

vector<string> v3(5, "hello"); // 创建有 5 个值为“hello”的 string 类对象的容 器 vector<string> v4(v3.begin(), v3.end()); // v4 是与 v3 相同的容器(完全复 制) vector 的操作(下面的函数都是成员函数) bool empty() const; false size_type max_size() const; size_type size() const; size_type capacity() const; capacity() >= size() void reserve(size_type n); void resize(size_type n, T x = T()); 之前 size()<n,那么用元素 x 的值补全。 reference front(); 非空) const_reference front() const; reference back(); 须非空) const_reference back() const; reference operator[](size_type pos); // 返回下标为 pos 的元素的引用 (下 // 返回容器中最后一个元素的引用 (容器必 // 返回容器中第一个元素的引用(容器必须 // 确保 capacity() >= n // 确保返回后,有:size() == n;如果 // 返回容器能容纳的最大元素个数 // 返回容器中元素个数 // 容器能够存储的元素个数,有: // 如果为容器为空,返回 true;否则返回

标从 0 开始;如果下标不正确,则属于未定义行为。 const_reference operator[](size_type pos) const; reference at(size_type pos); 下标不正确,则抛出异常 out_of_range const_reference at(size_type pos) const; // 返回下标为 pos 的元素的引用;如果

void push_back(const T& x); void pop_back(); 空)

// 向容器末尾添加一个元素 // 弹出容器中最后一个元素(容器必须非

// 注:下面的插入和删除操作将发生元素的移动(为了保持连续存储的性 质),所以之前的迭代器可能失效 iterator insert(iterator it, const T& x = T()); 元素(或者说在插入点插入元素) void insert(iterator it, size_type n, const T& x); 有效(可能重新分配空间) void insert(iterator it, const_iterator first, const_iterator last); iterator erase(iterator it); // 删除指定元素, 并返回删除元素后一个元 // 注意迭代器可能不再 // 在插入点元素之前插入

素的位置(如果无元素,返回 end()) iterator erase(iterator first, iterator last); // 注意:删除元素后,删除点之后 的元素对应的迭代器不再有效。 void clear() const; end()) void assign(size_type n, const T& x = T()); 容器内所有元素 void assign(const_iterator first, const_iterator last); const_iterator begin() const; iterator begin(); const_iterator end() const; iterator end(); const_reverse_iterator rbegin() const; reverse_iterator rbegin(); const_reverse_iterator rend() const; reverse_iterator rend(); vector 对象的比较(非成员函数) // 迭代序列 // 赋值,用指定元素序列替换 // 清空容器,相当于调用 erase( begin(),

针对 vector 对象的比较有六个比较运算符:operator==、operator!=、 operator<、operator<=、operator>、operator>=。 其中,对于 operator==和 operator!=,如果 vector 对象拥有相同的元素 个数,并且对应位置的元素全部相等,则两个 vector 对象相等;否则不等。 对于 operator<、operator<=、operator>、operator>=,采用字典排序策 略比较。 注:其实只需要实现 operator==和 operator!=就可以了,其它可以根据这两 个实现。 因为, operator!= (lhs, rhs) 就是 !(lhs == rhs), operator<=(lhs, rhs) 就 是 !(rhs < lhs),operator>(lhs, rhs) 就是 (rhs < lhs),operator>=(lhs, rhs) 就 是 !(lhs, rhs)。 vector 类的迭代器 vector 类的迭代器除了支持通用的前缀自增运算符外,还支持算术运算: it + n、it - n、it2 - it1。注意 it2 - it1 返回值为 difference_type(signed 类型)。 注意,任何改变容器大小的操作都可能造成以前的迭代器失效。 应用示例 #include <iostream> #include <cassert> #include <vector> using namespace std; int main() { vector<string> v(5, "hello"); vector<string> v2(v.begin(), v.end());

assert(v == v2);

cout<<"> Before operation"<<endl; for(vector<string>::const_iterator it = v.begin(); it <

v.end(); ++it) cout<<*it<<endl;

v.insert(v.begin() + 3, 4, "hello, world"); cout<<"> After insert"<<endl; for(vector<string>::size_type i = 0; i < v.size(); ++i) cout<<v[i]<<endl;

vector<string>::iterator it = v.erase(v.begin() + 3, v.begin() + 6); assert(*it == "hello, world"); cout<<"> After erase"<<endl; for(vector<string>::size_type i = 0; i != v.size(); ++i) cout<<v[i]<<endl;

assert(v.begin() + v.size() == v.end()); assert(v.end() - v.size() == v.begin()); assert(v.begin() - v.end() == -vector<string>::difference_type(v.size()));

return 0; } 程序说明:上面程序中用了三个循环输出容器中的元素,每个循环的遍历方 式是不一样的。特别需要说明的是,第二个循环在条件判断中使用了 size() 函 数,而不是在循环之前先保存在变量中再使用。之所以这样做,有两个原因:其 一,如果将来在修改程序时,在循环中修改了容器元素个数,这个循环仍然能很 好地工作,而如果先保存 size()函数值就不正确了;其二,由于这些小函数(其 实现只需要一条返回语句) 基本上都被声明为 inline, 所以不需要考虑效率问题。

--------------------------------c++编程语言中有一种叫做 Vector 的应用方法, 它的作用在实际编程中是非常重要的。 在这里我们将会为大家详细介绍一下 C++ Vector 的相关应用技巧及基本内容,希望能给大 家带来一些帮助。 (1)vector< 类型 > 标识符 ; (2)vector< 类型 > 标识符(最大容量) ; (3)vector< 类型 > 标识符(最大容量,初始所有值); (4) int i[4] = {12,3,4,5};

1.

vector< 类型 > vi(i , i+2); //得到 i 索引值为 3 以后的值 ; <

(5)vector< vector<int> > //vi 定义 2 维的容器;记得一定要有空格,不然会报错

1. 2. 3. 4. 5. 6. 7.

vector< int > line < // 在使用的时候一定要首先将 vi 个行进行初始化; for(int i = 0 ; i < 10 ; i ++) { vector.push_back(line); } /// 个人认为使用 vector 定义二维数组很好, 因为是长度可以不预先确定。很好。

(6)C++ Vector 排序

1. 2. 3. 4. 5. 6.

vector< int > vi ; < vi.push_back(1); vi.push_back(3); vi.push_back(0); sort(vi.begin() , vi.end()); /// /小到大 reverse(vi.begin(),vi.end()) /// 从大道小

(7)顺序访问

1. 2. 3.

vector < int > vi ; for( int i = 0 ; i < 10 ; i ++) {

4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
(8)寻找

vector.push_back(i); } for(int i = 0 ; i < 10 ; i ++) /// 第一种调用方法 { cout <<vector[i] << " ; <<vector <<" vector } for(vector<int>::iterator it = vi.begin() ; < int> it !=vi.end() ; it++) ///第二种调用方法 { cout << *it << " " ; }

1. 2. 3. 4. 5. 6. 7.

vector < int > vi ; for( int i = 0 ; i < 10 ; i ++) { vector.push_back(i); } vector < int >::interator it = find(vi.begin() , vi.end,3) ; cout << *it << endl ; ///返回容器内找到值的位置。

(9)使用数组对 C++ Vector 进行初始化

1. 2. 3. 4. 5. 6. 7. 8.

int i[10] ={1,2,3,4,5,6,7,78,8} ; ///第一种 vector<int> vi(i+1,i+3); ///从第 2 个元素到第三个元素 <int> for(vector <int>::interator it = vi.begin() ; int> it != vi.end() ; it++) { cout << *it << " ; <<" }

(10) 结构体类型

1. 2.

struct temp {

3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.

public : string str ; public : int id ; }tmp int main() { vector <temp> t ; temp> temp w1 ; w1.str = "Hellowor" ; w1.id = 1 ; t.push_back(t1); cout << w1.str << "," <<w1.id <<endl ; <<w1.id <<endl return 0 ; }


更多相关文档:

C++ stl的小结 用法

C++ stl的小结 用法_计算机软件及应用_IT/计算机_专业资料。STL 用法之所以...的初值 i) s.~string() //销毁所有字符,释放内存 都很简单,我就不解释了...

C++ STL入门

C++ STL入门_计算机软件及应用_IT/计算机_专业资料。c++ STL简单入门知识,提供可运行源码 //sort 的使用 #include<cstdio> #include<cstring> #include<algorithm>...

C++ STL之array的用法

C++ STL之array的用法_计算机软件及应用_IT/计算机_专业资料。C++ STL中array容器的使用方法,各种成员函数的示例 Array 容器的相关知识,array 是一个顺序容器,和...

C++ STL模板和Map使用大全

C++ STL模板和Map使用大全_计算机软件及应用_IT/计算机_专业资料。C++ STL模板和Map使用大全,很有用,大家分享!C++ STL 模板和 Map 使用大全 C++ map 的基本操作...

C++ STL queue用法

C++ STL queue 用法 Admin 2012 年 7 月 26 日 名人名言:文化修养的目的在于增强和提高鉴赏那些最高尚、最深奥的事物的真和美的能力。 ——波伊斯 FIFO queue...

C++ STL编程轻松入门基础

简单例程 2.1 引子 2.2 例程实作 2.3 历史的评价 2.4 如何运行 作为 C++...就拿 C/C++中的指针而言,它的灵活与高效运用,使 后来的 STL 在实现泛型化的...

STL编程轻松入门C++

本节将带您 简单回顾一下 STL 的过去。被誉为 STL 之父的 Alexander ...就拿 C/C++中的指针而言,它的灵活与高效运用,使后来的 STL 在实现泛型化的...

STL详解(C++版)

C++通过模板的机制允许推迟对某些类型的选择,直到真正想使用模 板或者说对模板进行特化的时候,STL 就利用了这一点提供了相当多的有用 算法。它是在一个有效...

c++STL库队列简单案例

c++STL库队列简单案例_计算机软件及应用_IT/计算机_专业资料。C++队列 Queue 类...{ queue<int>q;//使用标准模板库(STL) int s1=6,s2=7,s3=8,s4=9; /...

C++ STL之List的使用

C++ STL之List的使用_计算机软件及应用_IT/计算机_专业资料。C++ STL 的list容器的每个函数的使用说明,熟练掌握STL,对编程的质量和速度都是有莫大的帮助。List...
更多相关标签:
网站地图

文档资料共享网 nexoncn.com copyright ©right 2010-2020。
文档资料共享网内容来自网络,如有侵犯请联系客服。email:zhit325@126.com