vector
vector元素可以相同
##vector初始化
1 2 3 4 5 6 7 8
| vector<int>obj; for (int i = 0; i<10; i++) { obj.push_back(i); cout << obj[i] << ","; }
vector<int> veca(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; for (int i = 0; i < train.size(); i++) cout << train[i].first << endl;
|
添加插入vector元素
vector合并
1 2
| vec2.insert(vec2.end(),vec1.begin(),vec1.end());
|
排序
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");
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; B.insert(3); B.insert(2); B.insert(4);
if (includes(A.begin(), A.end(), B.begin(), B.end())) { 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));
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)。
|