vector的基本用法:
(1)vector obj;创建一个type类型的空的一维vector数组
(2)vector obj(N, 0):创建一个type类型元素个数为N且初始值为0的一维vector数组//(N, 0)<==> (N)
(3)vector(int nSize,const t& t):创建一个vector,元素个数为nSize,且值均为t
(4)vector<vector > obj(N); //定义二维动态数组大小N行
(5)vector<vector > obj(N, vector(M,0)); //定义二维动态数组N行M列且初始化为0
(6)obj.push_back(const T& x):向量尾部增加一个元素X
(7)obj.pop_back():删除向量中最后一个元素
(8)obj.void clear():清空向量中所有元素
(9)reference at(int pos):返回pos位置元素的引用
(10)reference front():返回首元素的引用
(11)reference back():返回尾元素的引用
(12)begin():返回向量头指针,指向第一个元素
(13)end(); 返回向量尾指针,指向最后一个元素的下一个位置
(14)int size() const:返回向量中元素的个数
(15)int capacity() const:返回当前向量张红所能容纳的最大元素值
(16)int max_size() const:返回最大可允许的vector元素数量值
(17)reverse(const &a, const &b);把数组从a到b位置的元素颠倒过来
1.pop_back()&push_back(elem)实例在容器最后移除和插入数据
#include <string.h>
#include <vector>
#include <iostream>
using namespace std;
int main()
{
vector<int>obj;//创建一个向量存储容器 int
for(int i=0;i<10;i++) // push_back(elem)在数组最后添加数据
{
obj.push_back(i);
cout<<obj[i]<<",";
}
for(int i=0;i<5;i++)//去掉数组最后一个数据
{
obj.pop_back();
}
cout<<"\n"<<endl;
for(int i=0;i<obj.size();i++)//size()容器中实际数据个数
{
cout<<obj[i]<<",";
}
return 0;
}
2.clear()清除容器中所有数据
#include <string.h>
#include <vector>
#include <iostream>
using namespace std;
int main()
{
vector<int>obj;
for(int i=0;i<10;i++)//push_back(elem)在数组最后添加数据
{
obj.push_back(i);
cout<<obj[i]<<",";
}
obj.clear();//清除容器中所以数据
for(int i=0;i<obj.size();i++)
{
cout<<obj[i]<<endl;
}
return 0;
}
3.排序
#include <string.h>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
vector<int>obj;
obj.push_back(1);
obj.push_back(3);
obj.push_back(0);
sort(obj.begin(),obj.end());//从小到大
cout<<"从小到大:"<<endl;
for(int i=0;i<obj.size();i++)
{
cout<<obj[i]<<",";
}
cout<<"\n"<<endl;
cout<<"从大到小:"<<endl;
reverse(obj.begin(),obj.end());//从大到小
for(int i=0;i<obj.size();i++)
{
cout<<obj[i]<<",";
}
return 0;
}
1.注意 sort 需要头文件 #include
2.如果想 sort 来降序,可重写 sort
bool compare(int a,int b)
{
return a< b; //升序排列,如果改为return a>b,则为降序
}
int a[20]={2,4,1,23,5,76,0,43,24,65},i;
for(i=0;i<20;i++)
cout<< a[i]<< endl;
sort(a,a+20,compare);
4.二维数组两种定义方法
方法一:
#include <string.h>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int N=5, M=6;
vector<vector<int> > obj(N); //定义二维动态数组大小5行
for(int i =0; i< obj.size(); i++)//动态二维数组为5行6列,值全为0
{
obj[i].resize(M);
}
for(int i=0; i< obj.size(); i++)//输出二维动态数组
{
for(int j=0;j<obj[i].size();j++)
{
cout<<obj[i][j]<<" ";
}
cout<<"\n";
}
return 0;
}
方法二:
#include <string.h>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int N=5, M=6;
vector<vector<int> > obj(N, vector<int>(M)); //定义二维动态数组5行6列
for(int i=0; i< obj.size(); i++)//输出二维动态数组
{
for(int j=0;j<obj[i].size();j++)
{
cout<<obj[i][j]<<" ";
}
cout<<"\n";
}
return 0;
}
map的基本用法:
本篇文章只是简单介绍map()的用法。尤其在查字典方面的应用。并不追求内部源码的研究和所有内容的完整性。
1.为什么要学习map()?
答:Map是STL的一个关联容器,
关联容器的优点是:它提供了对元素的快速访问。例如(最大匹配分词时,查字典效率更高)
map内部自建一颗红黑树(一 种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的。
2.map的简介
map把值与键关联在一起,可以使用键来查找词。例如:键可以表示学号,而值 可以对应姓名。
3.map的使用
使用map得包含map类所在的头文件 #include
4.map的建立
map<int, string> t;
5.map数据插入:
t[int]=字符串)(map内部对[]进行了重载)
6.map的大小
Int nSize = mapStudent.size();
7.数据的遍历
先定义一个迭代器(广义指针):
map<int,string>::iterator iter;
然后输出map的键和值。
iter->first 值的是键,
iter->second指的是值。
#include<iostream>
#include<map>
#include<string>
using namespace std;
int main()
{
map<int, string> t;
t[0] = "1";
t[1] = "188";
map<int,string>::iterator iter;
for (iter = t.begin(); iter != t.end(); iter++) {
cout << iter->first << "->" << iter->second << endl;
}
system("pause");
return 0;
8.map的查字典()
两种方法:
1.第一种:用count函数(count函数是map对象自带的函数)来判定关键字是否出现。其缺点是无法定位数据出现位置,由于map的特性,一对一的映射关系,就决定了count函数的返回值只有两个,要么是0,要么是1,出现的情况,当然是返回。
2.第二种:用find函数来定位数据出现位置,它返回的一个迭代器,当数据出现时,它返回数据所在位置的迭代器,如果map中没有要查找的数据,它返回的迭代器等于end函数返回的迭代器。举例说明:
#include<iostream>
#include<map>
#include<string>
using namespace std;
int main()
{
map<int, string> t;
t[0] = "1";
t[1] = "188";
map<int,string>::iterator iter;
iter= t.find(0);
if (iter!= t.end()) {
cout << "字典中有这个值" << endl;
}
else {
cout << "字典中没有这个值" << endl;
}
system("pause");
return 0;
}
9.map的基本操作函数:
C++ map是一种关联式容器,包含“关键字/值”对
begin() 返回指向map头部的迭代器
clear() 删除所有元素
count() 返回指定元素出现的次数
empty() 如果map为空则返回true
end() 返回指向map末尾的迭代器
equal_range() 返回特殊条目的迭代器对
erase() 删除一个元素
find(键) 查找一个元素
get_allocator() 返回map的配置器
insert() 插入元素
key_comp() 返回比较元素key的函数
lower_bound() 返回键值>=给定元素的第一个位置
max_size() 返回可以容纳的最大元素个数
rbegin() 返回一个指向map尾部的逆向迭代器
rend() 返回一个指向map头部的逆向迭代器
size() 返回map中元素的个数
swap() 交换两个map
upper_bound() 返回键值>给定元素的第一个位置
value_comp() 返回比较元素value的函数
10.迭代器的一些基本用法
(1).C++中每种容器定义了自己的迭代器如vector:
#include<bits/stdc++.h>
int main(){
std::vector <int> ::iterator it;
}
----------------------------------//注意
#include<bits/stdc++.h>
using namespace std;
int main(){
(std::)vector <int> ::iterator it;
}
(2).每种容器都定义了一种名为begin和end的函数,用于返回迭代器:
#include<bits/stdc++.h>
vector<int> a; // map, stack........容器
int main(){
int n;
cin >> n;
for(int i = 0; i < n; i++){
// 输入
}
for( std::vector <int> ::iterator it = a.begin; it != a.end; it++){
//调用
}
}