C++STL的使用心得汇总(vector,string,map,list)

待完善…

find()函数

vector的find

// 寻找vec中数值10所在下标,返回10的迭代器
auto it = find(vec.begin(), vec.end(), 10); 
if (it != vec.end())  
	cout <<  it - vec.begin();  //tip: cout << *it = 10;
}

string的find

// 查找第一次出现的目标字符串substr,如果查找成功则输出查找到的第一个位置,否则返回-1
string s1 = "abcdef";
string s2 = "de";
int index = s1.find(s2) ;

int index1 = s1.find_first_of(s2);

int index1 = s1.find_last_of(s2);

map的find

// 寻找键值为1的 返回1所对应的键值对
auro it = map.find(1);
if(iter != map.end())
	cout<<iter->second<<endl;

count()函数



vector的count

一.count函数: 返回元素值为target的元素个数。

int num=count(vector1.begin(),vector2.begin(),target);   
//注意不是vector的类函数哟!!

二.count_if函数:返回符合一定条件的元素个数。compare()函数是自定义的,返回值是true就是表示符合要求。

bool compare(student a){
    return 90<a.score;
}
cout<<count_if(V.begin(),V.end(),compare)<<endl;

string的count

string s;
int num = count(s.begin(), s.end(), '1');
//注意:参数是字符而不是子串

map的count

//map中count(键值),只有1和0两种结果,用于判断其中是否有该键值对应的键值对
if(maps.count(1)==0)
    {
        cout<<"没有1这个元素"<<endl;
    }

// tip:判断其中是否有该键值对应的键值对,还可以用find方法
if(maps.find(1)==maps.end())
    {
        cout<<"没有1这个元素"<<endl;
    }

vector

tip:
如果需要高效的随机存取,而不在乎插入和删除的效率,使用vector;
如果需要大量的插入和删除,而不关心随机存取,则应使用list。”

|| vector的构造函数(初始化)

vector<T> v;   // 默认构造函数
vector(const vector &vec);  // 拷贝构造函数。
vector(v.begin(), v.end());   // 将v [begin(), end()) 区间中的元素拷贝给本身。
vector(n, elem);   // 构造函数将n个elem拷贝给本身。

|| vector的赋值

|= ”赋值:
vector& operator=(const vector& vec)

|assign赋值 --- 传入子集时使用
vector.assign(v'.begin(), v'.end()// 将v [begin(), end()) 区间中的元素拷贝给本身
vector.assign(10, 100)  // 重复次数和重复字符

|| vector的容量和大小

empty()   --// 判空返回true或false
size()	--//返回容器长度(元素个数)

|| vector的插入和删除

push_back(elem) 
pop_back()
insert(const_iterator pos, int count = 1, elemtype elem)  
//在迭代器指向的位置插入count个elem 注意:必须使用迭代器指明位置,插入个数不指明时为1
erase(const_iterator pos)    // 删除迭代器指定位置的元素
erase(const_iterator pos_start, const_iterator pos_end) // 删除迭代器指定位置间的所有元素
clear()

|| vector的读取

[ ]读取 // 
at读取
front()
back()

|| vector 转为数组

// 简单移动
 int arr[n];
 for(int i=0; i<n; i++){
   arr[i] = vec[i];
 }
//copy函数
int arr[input.size()];
copy(vec.begin(), vec.end(), arr);

string

|| 容器string内部封装的是一个类,其中封装的成员函数操作对象可以是string类,也可以是char型字符串

|| string类的构造函数 :(初始化)

string()默认构造
string  s2(const char * str) // string s2 (s1)    -- 拷贝构造(拷贝字符串或拷贝string)
string(int a, char b) 使用a个b初始化string

|| string的赋值操作

//1,“ = ”赋值 
//2,assign赋值 (可以传入子串,和自定义重复串)
string & assign (const char * s) / (const char * s, int a)//---将s或s前a个字符赋值给string 	
string & assign(const string & s) / (const string & s, int a)// ---将s或s除前a个字符后的所有字符值给string
string & assign(int a, char ‘c’)     // --- 将a个字符c 赋值给string

|| string的拼接 (拼接指的是拼到末尾)

//1,“ += ”拼接:
string& operator+=(const string & s) 
//2,append赋值:
string& append (const char * s) / (const char * s, int n) //将char型字符串或其前n个字符拼接在s末尾
string& append(const string & s) / (const string & s, int start, int end) //将string或string的start end范围内的子串拼接在s末尾

|| string的替换

string& replace(int pos,int num,const string& s) / (int  pos, int num, const char* s)//---替换从pos位置开始的num个字符为s

|| string的比较(比较原理:逐个比较字符的ASCll码)

int compare(const string& s) / (const char * s) ---= 则返回0(若>返回1,若<返回-1

|| string的读写

1,“ [ ] ” 读取:
2,at 读取:

|| string的插入和删除 (插个话:替换的本质就是删除加插入)

//1,插入:
string& insert(int pos, const char* s) / (int pos, const string &s)
string& insert(int pos, int a , char c)
//2, 删除:
string& erase(int pos, int a) --- 删除从pos开始的a个字符

|| string的子串

string& substr(int pos = 0, int npos = s.size() - pos) 
//(pos的默认值是0,n的默认值是s.size() - pos)
//当有两个参数时:截取pos - npos的子串
//当不带参数时:默认拷贝整个s
//当只带一个参数时:此参数为头,默认第二个参数为字符串末尾

map的各种排序方法

1、key从大到小

map<string, int, greater<int>> hash;

2、特殊规则排序

bool compare(string a, string b){
	return a.size() < b.size();
}

map<string, int, compare()> hash;

3、按value排序

map中key不允许重复,而multimap允许key重复。通过将map中的key和value对调存储到multimap中,就可以实现对map按值排序了。

map<char,int> cnt;
multimap<int,char>_cnt;
for(map<char,int>::iterator itr = cnt.begin();itr!=cnt.end();itr++){
	_cnt.insert(pair<int,char>(itr->second,itr->first));
}

转换相关

string --> char*
char* --> string

int --> char
char --> int

int[] --> string
string --> int[]

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值