又是一篇抄袭Vincent的博客,主要整理了笔试中常见容器的用法
vector 容器类的使用
元素的访问
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| vector<int> ::iterator iter = record.begin(); for (; iter != record.end(); iter++) cout << *iter << " "; cout << endl; vector<int> record({ 1, 2, 3, 4, 5 }); for (int i=0; i < record.size() ; i++) cout << record[i] << " "; cout << endl; int first=record.front(); int last=record.back();
|
赋值
1 2
| vector<int> record(100,1);
|
1 2 3 4 5 6 7 8 9 10
| vector<int> record; int input;cin >>input; record.push_back(input); vector<int> record(1); int input;cin >>input; record[0]=input;
|
- 将==输入的数字==传入一个已有的==vector==
1 2 3 4
| int a,b,c; cin>>a>>b>>c; vector<int> record({a,b,c});
|
- 将一个==vector==中的一个==区间==赋值给另外一个==vector==
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| vector<int> input({1,2,3,4,5,6,7,8}); vector<int> record(input.begin()+3-1,input.begin()+7-1); vector<int> record; record.assign(input.begin(),input.end()); vector<int> record(input.begin() , input.end()); vector<int> record; record.swap(input);
|
- 将一个==数组==赋值给另外一个==vector==
1 2 3 4
| int arr[] = { 1, 2, 3, 4, 5 }; vector<int> record(arr, arr + sizeof(arr)/sizeof(arr[0]));
|
插入
1 2 3 4 5 6 7 8 9
| vector<int> record= { 1, 2, 3, 4, 5 }; record.insert(record.begin()+2,100); vector<int> record = { 1, 2, 3, 4, 5 }; vector<int> a({ 5, 2, 7, 8, 1, 0, 4 }); record.insert(record.begin() + 1, a.begin(), a.end());
|
排序
- 对vector进行排序:==std::sort==的使用
1 2 3 4 5
| vector<int> input({ 2, 7, 4, 5, 1, 9, 3, 10, 6 }); vector<int> input_copy(input.begin() , input.end()); sort(input_copy.begin(), input_copy.end());
|
统计
- 在vector中统计特定元素出现的次数:==std::count==的使用
1 2 3 4 5 6
| vector<int> input({ 2, 7, 1, 1, 1, 1, 4, 5, 1, 9, 7, 10, 6 }); vector<int> record(input.begin() , input.end()); int times = count(record.begin(), record.end(), 7); cout << times << endl;
|
查找
- 在vector中查找是否出现了某个元素:==std::find==的使用
1 2 3 4 5 6 7
| vector<int> input({ 2, 7, 1, 1, 1, 1, 4, 5, 1, 9, 7, 10, 6 }); vector<int> record(input.begin() , input.end()); vector<int> ::iterator it = find(record.begin(), record.end(), 8); if (it != tmp.end()) cout << "found it !" << endl; else cout << "404 not found !" << endl;
|
map容器类的使用
map就是所谓的映射,表示了从key->value
的映射关系,map中的元素是按照二叉搜索树存储,进行中序遍历会得到有序遍历。
注意:unordered_map和map类似,都是存储的key-value的值,可以通过key快速索引到value。不同的是unordered_map不会根据key的大小进行排序。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| map<string, int>::iterator it; map<string, int> record; record.insert(make_pair("c", 6)); record.insert(make_pair("b", 66)); record.insert(make_pair("a", 666)); for (it = record.begin(); it != record.end(); ++it) cout << "key: " << it->first << " value: " << it->second << endl;
|
map的初始化
- maprecord; 其中type1/2表示类型,
1 2 3 4 5
| map<int, vector<int>> record; vector<int > value = { 5, 2, 7, 8, 1, 0, 4 }; record.insert(pair<int, vector<int>>(1, value)); record.insert(pair<int, vector<int>>(2, {4,5})); record.insert(pair<int, vector<int>>(3, {7,3,9,2}));
|
注意:上述初始化利用了pair来创建数据对, 在创建时需要指定类型。我们也可以用==make_pair==来简化这一步骤,make_pair():
无需写出型别, 就可以生成一个pair对象 。
1 2 3 4
| map<int, vector<int>> record; record.insert(make_pair(1, { 5, 2, 7, 8, 1, 0, 4 })); record.insert(make_pair(2, {4,5})); record.insert(make_pair(3, {7,3,9,2}));
|
map元素的访问
- 访问普通数组的方式来访问map;不过此时的key值应为int型
1 2 3 4 5 6 7 8
| cout << record.size() << endl; for (int i = 0; i < record.size(); i++) { vector<int> temp = record[i]; for (int j = 0; j < temp1.size(); j++) cout << temp[j] << " "; cout << endl; }
|
1 2 3 4 5 6 7 8 9
| map<int,int>::iterator it; map<int, int> record; record.insert(pair<int, int>(1, 100)); record.insert(pair<int, int>(2, 200)); record.insert(pair<int, itn>(3, 300)); for(it=record.begin();it!=record.end();++it) cout<<"key: "<<it->first <<" value: "<<it->second<<endl;
|
查找:find()
对于容器们set,map以及相应的unordered_set或者unordered_map都有该成员函数。
例如对于一个unordered_map类型的变量record。
1 2 3 4 5
| unordered_map<int,int> record; if(record.find(key)!=record.end()) { ... }
|
栈的使用
stack var; // 声明一个type_name类型的var
常用的命令包括
位运算
n&1和n%2是一个意思
参考
vector容器类
在线IDE