塞进裤子ヾ(≧O≦)〃嗷~

0%

c++ STL 用法整理

vector

vector元素可以相同

##vector初始化

1
2
3
4
5
6
7
8
  vector<int>obj;//创建一个向量存储容器 int
for (int i = 0; i<10; i++) // push_back(elem)在数组最后添加数据
{
obj.push_back(i);
cout << obj[i] << ",";
}

vector<int> veca(10, 1); // 初始化了10个值为1的元素

输出vector元素

1
2
3
4
5
6
 for (int i = 0; i < A.size(); i++)
cout << A[i] << endl;

vector<pair<int, int>>train;//pair有两个成员,一是first,二是second
for (int i = 0; i < train.size(); i++)
cout << train[i].first << endl;

添加插入vector元素

1
vecA.pushback(vlaue)

vector合并

1
2
vec2.insert(vec2.end(),vec1.begin(),vec1.end());
//void insert (iterator position, InputIterator first, InputIterator last);

排序

1
2
#include<algorithm>
sort(vecA.begin(),vecA.end());

二维数组

1
2
3
4
5
6
7
8
9
10
11
12
13
//得到一个5行3列的数组
//由vector实现的二维数组,可以通过resize()的形式改变行、列值

int i,j;
vector<vector<int>> array(5);

for (i = 0; i < array.size(); i++)
array[i].resize(3);

for(i = 0; i < array.size(); i++)
for (j = 0; j < array[0].size();j++)
// array[i][j] = (i+1)*(j+1);
array[i] .push_back( (i+1)*(j+1));//注意使用push_back而不是=赋值,使用=容易越界。

查找元素是否存在

1
2
3
4
5
6
7
8

vector<string> vStr;

int nRet = std::count(vStr.begin(), vStr.end(), "xiaochun");

//判断vector中是否有 "xiaochun" 这个元素

if(find(nums2.begin(),nums2.end(),*it)!=nums2.end())//包含此元素

判断vecotr相等

如果是vector。直接用==,【1,2,3】与【2,1,3】不相等

如果是armo::uvec用approx_equal()

if (approx_equal(uvec1, uvec2, "absdiff", 0))
    cout << "相等";
1
2
3
4
5
6
7
8
9
vector<int> uvec1;
for (int i = 0; i < 3; i++)
uvec1.push_back(i * 10);
vector<int> uvec2;
uvec2.push_back(0); uvec2.push_back(10); uvec2.push_back(20);
for (int i = 0; i < 3; i++)
cout << uvec2[i] << endl;
if (uvec1 == uvec2) cout << "xiangdneg" << endl;
else cout << "buxiangdeng";

uvec

1
2
3
4
5
6
7
8
uvec uvec2 = zeros<uvec>(3);
uvec2[0] = 200;
uvec2[1] = 100;
uvec2[2] = 300;
for (int i = 0; i < 3; i++)
cout << uvec2[i] << endl;
====
200 100 300

set

set不能返回第i各元素;

set之间的赋值是独立的,set1=set2,改变set1不影响set2;

判断相等

注意: set会自动将元素按从小到大排序。python3中也是如此

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
set<int> test1;
test1.insert(5); test1.insert(3);# test1为3 5
set<int> test2;
test2.insert(3); test2.insert(5);
if (test1 == test2)
cout << "test1=test2" << endl;
===
test1=test2

#unordered_set也依旧相等
unordered_set<int> test1;
test1.insert(5); test1.insert(3);#test1为5 3
unordered_set<int> test2;
test2.insert(3); test2.insert(5);
====
test1=test2

判断是否是子集

1
2
3
4
5
6
7
8
9
10
11
12
set<int> A;
A.insert(2); A.insert(3); A.insert(4);

set<int> B;//replaced set
B.insert(3); B.insert(2); B.insert(4);

if (includes(A.begin(), A.end(), B.begin(), B.end()))
{//若B是A的子集
cout << "B是A的子集" << endl;
}
else
cout << "B不是A的子集" << endl;

删除元素

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
	set<int> test;
test.insert(5); test.insert(3); test.insert(1);
test.insert(20);


for (auto it = test.begin(); it != test.end(); it++)
cout << *it << " " << endl;
cout << "===" << endl;
test.erase(20);
for (auto it = test.begin(); it != test.end(); it++)
cout << *it << " " << endl;
===============
1
20
3
5
===
1
3
5

输出set元素

1
2
for (auto it = mediator_split.begin(); it != mediator_split.end(); it++)
cout << *it << " " << endl;

map

map.count(Key)返回值为1或者0,1返回存在,0返回不存在,返回的是布尔类型的值,因为在map类型中所有的数据的Key值都是不同的,所以被count的数要么存在1次,要么不存在

添加数据

1
2
3
4
5
6
7
8
9
map<int,int>a;

a.insert(pair<int,int>(2,3));//注意insert要插入pair对

a[0]=2;a[1]=3;//使用数组方式添加数据

map <char, int>a;
for (int i = 0; i < slength; i++)
{ a[s[i]] += 1; }

输出map元素

​```c++
for (auto it = entities2index.begin(); it != entities2index.end(); it++)
cout << “ “ << it->first << “:” << it->second;
//或者
for (auto &it : entities2index)
cout << “ “ << it.first << “:” << it.second << endl;

1
2
3
4
5
6
7
8
9
10
11
12
13

## map二维数组

```C+++
map<int, map<int, int>> a;
a[1][1] = 1; a[1][2] = 2; a[2][1] = 3;

for (auto i = a.begin(); i != a.end(); i++){
for (map<int, int>::iterator j = (i->second).begin(); j != (i->second).end(); j++){
cout << j->second << ends;
}
cout << endl;
}

字符

isalpha()

1
2
若不是字母,返回0
若为英文字母,返回非0(小写字母为2,大写字母为1)。
if help:小手一抖点个广告 or 大手一挥资助一下