C++中的Vector与map
来源:互联网 发布:数据分析前途 编辑:程序博客网 时间:2024/05/20 22:30
Vector:是标准库vector类型
使用vector,必须包含适当的头文件
#include<vector>
定义和初始化
vector<T> v1 //v1是一个空的vectorvector<T> v2(v1) //v2中包含v1的所有元素的副本vector<T> v2 = v1 //等价于v2(v1)
赋值
vector<string> v1{"hi"} //列表初始化,v1有一个元素vector<string> v2("hi") //错误,不能用一个字符串字面值创建vector对象vector<string> v3{10} //有10个默认初始化的值vector<string> v4{10,"hi"} //有10个值为"hi"的元素
注意:
vector<int> ivec(10) //10个元素,每一个元素均为0vector<string> svec(10) //10个元素。每一个都是空string对象//给vector赋值用{},涉及到vector中数量的时候用()
Vector对象最重要的几种操作
1. v.push_back(t) 在数组的最后添加一个值为t的数据
2. v.size() 当前使用数据的大小
3. v.empty() 判断vector是否为空
4. v[n] 返回v中位置为n的元素
5. v1=v2 把v1的元素替换为v2元素的副本
6. v1==v2 判断v1与v2是否相等
7. !=、<、<=、>、>= 保持这些操作符惯有含义
添加元素
#include<vector>vector<int> v1for(int i = 1;i!= 100;i++){ v1.push_back(i)}
不能用下标形式添加元素
vector<int> ivecfor(decltype(ivec.size()) ix = 0;ix!= 10;ix++){ ivec[ix] = ix //严重错误,ivec不包含任何的元素 ivec.push_back(ix) //正确,添加一个新元素,新元素为ix}
注意:只能对确知已存在的元素执行下标操作
vector<int> v1 //空的vector对象cout<<v1[0] //错误,v1不含有很合元素vector<int> v2(10) //含有10个元素的vector对象cout<<v2[10] //错误:v2的合法索引值是0到9
capacity和size
容器的size是指它已经保存的元素的数目,而capacity是指在不分配新的内存空间的前提下,它最多可以保存多少元素
vector<int> iveccout<<"ivec:size"<<ivec.size()<<"capacity"<<ivec.capacity()<<end//size为0,最后的实现两个都为0,标准库中一个空的vector的capacity也为0//总结:只要操作没有超出vector的容量,vector就不能重新分配内存空间,vector的实现策略是每次需要分配新的内存空间时将当前容量翻倍
map:map是c++的一个标准容器,她提供了很好一对一的关系,在一些程序中建立一个map可以起到事半功倍的效果
map是一种关联容器,关联容器支持高效的关键字查询和访问,两个主要的关联容器就是map和set,map中的元素是一些关键字-值对,关键字起到索引的作用,值则表示与关键字相关联的数据。
1.map最基本的构造函数;
map<string , int >mapstring; map<int ,string >mapint; map<sring, char>mapstring; map< char ,string>mapchar; map<char ,int>mapchar; map<int ,char >mapint; // map<char ,int>mapchar; 定义的map中,第一个是关键字的类型,第二个是值的类型,这个关键字是char类型,值是int类型
2.map添加数据;
map<int ,string> maplive; maplive.insert(pair<int,string>(102,"aclive"));maplive.insert(map<int,string>::value_type(321,"hai"));maplive[112]="April";//map中最简单的插入添加!慎用,如果不存在,会把新元素插入
3.map中元素的查找:
find()函数返回一个迭代器指向键值为key的元素,如果没找到就返回指向map尾部的迭代器。
map<int ,string >::iterator l_it;; l_it=maplive.find(112); if(l_it==maplive.end()) cout<<"we do not find 112"<<endl; else cout<<"wo find 112"<<endl;
4,map中元素的删除:
如果删除112;
map<int ,string >::iterator l_it;; l_it=maplive.find(112); if(l_it==maplive.end()) cout<<"we do not find 112"<<endl; else maplive.erase(l_it); //delete 112;
5,map中 swap的用法:
Map中的swap不是一个容器中的元素交换,而是两个容器交换;
For example:
#include <map> #include <iostream> using namespace std; int main( ) { map <int, int> m1, m2, m3; map <int, int>::iterator m1_Iter; m1.insert ( pair <int, int> ( 1, 10 ) ); m1.insert ( pair <int, int> ( 2, 20 ) ); m1.insert ( pair <int, int> ( 3, 30 ) ); m2.insert ( pair <int, int> ( 10, 100 ) ); m2.insert ( pair <int, int> ( 20, 200 ) ); m3.insert ( pair <int, int> ( 30, 300 ) ); cout << "The original map m1 is:"; for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ ) cout << " " << m1_Iter->second; cout << "." << endl; // This is the member function version of swap //m2 is said to be the argument map; m1 the target map m1.swap( m2 ); cout << "After swapping with m2, map m1 is:"; for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ ) cout << " " << m1_Iter -> second; cout << "." << endl; cout << "After swapping with m2, map m2 is:"; for ( m1_Iter = m2.begin( ); m1_Iter != m2.end( ); m1_Iter++ ) cout << " " << m1_Iter -> second; cout << "." << endl; // This is the specialized template version of swap swap( m1, m3 ); cout << "After swapping with m3, map m1 is:"; for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ ) cout << " " << m1_Iter -> second; cout << "." << endl;}
6.map的sort问题:
Map中的元素是自动按key升序排序,所以不能对map用sort函数:
#include <map> #include <iostream> using namespace std; int main( ) { map <int, int> m1; map <int, int>::iterator m1_Iter; m1.insert ( pair <int, int> ( 1, 20 ) ); m1.insert ( pair <int, int> ( 4, 40 ) ); m1.insert ( pair <int, int> ( 3, 60 ) ); m1.insert ( pair <int, int> ( 2, 50 ) ); m1.insert ( pair <int, int> ( 6, 40 ) ); m1.insert ( pair <int, int> ( 7, 30 ) ); cout << "The original map m1 is:"<<endl; for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ ) cout << m1_Iter->first<<" "<<m1_Iter->second<<endl;} The original map m1 is: 1 20 2 50 3 60 4 40 6 40 7 30
set:也是一种关联容器
定义
set<string> s1 = {"hello","world"}
添加元素
set s1s1.insert("hello")s1.insert("world")
元素删除:与插入一样,可以高效的删除,并自动调整使红黑树平衡。
set<int> s;s.erase(2); //删除键值为2的元素s.clear();
5.元素检索:find(),若找到,返回该键值迭代器的位置,否则,返回最后一个元素后面一个位置。
set<int> s;set<int>::iterator it;it=s.find(5); //查找键值为5的元素if(it!=s.end()) //找到 cout<<*it<<endl;else //未找到 cout<<"未找到";
对set常用的操作
1.元素插入:insert()
2.中序遍历:类似vector遍历(用迭代器)
3.反向遍历:利用反向迭代器reverse_iterator
set<int> s; ...... set<int>::reverse_iterator rit; //反向遍历 for(rit=s.rbegin();rit!=s.rend();rit++)
set<int> s; ...... set<int>::iterator rit; //正向遍历 for(rit=s.begin();rit!=s.end();rit++)
- C++中的Vector与map
- C++list、vector、map区别与用法
- c++,vector,map
- map与vector
- C++STL (vector,list,map)
- std::map与std::vector
- map与vector,typedef与define
- 循环删除vector和map中的元素
- 循环删除vector和map中的元素
- 循环删除vector和map中的元素
- 循环删除vector和map中的元素
- C++ STL中的map和vector
- C++MAP和vector的用法
- C++STL库 vector map list 使用方法
- list与linkedlist、arrylist、Vector、Map区别
- Map与List及Vector性能比较
- list与linkedlist、arrylist、Vector、Map区别
- Map与List和Vector性能比较
- spring+springmvc+hibernate
- HDU 4352 数位dp
- requestWindowFeature(Window.FEATURE_NO_TITLE)失效
- js毫秒倒计时
- java 8.25总结
- C++中的Vector与map
- [PAT] B1043
- JQuery基础内容
- 图片验证码
- android复选框删除、反选、全选以及取消
- CoreData的简单使用<四、多个数据库>
- uboot简化SI工程
- 线性表(1)--顺序表模拟
- 小牛各个版本的限速破解方式-适用N1/M1/N1s----附加转向灯提示音修改