C++常用类型STL库用法总结
1.string类总结:
- 定义方法: #include
, 除此之外还要using namespace std; - 使用方法:
- string 重载了 += 、 +、!= 、==、<= 、>= 、 >、 < 操作符可以直接使用, if (s <= "aaa") return;
- 可以string s; s[i]的方式调用单个字符
- 输入输出:cin 和 cout配合
- 常用函数:
int size()const; //返回当前字符串的大小
int length()const; //返回当前字符串的长度
bool empty()const; //当前字符串是否为空
void resize(int len,char c); //把字符串当前大小置为len,多去少补,多出的字符c填充不足的部分
string &insert(int p,const string &s); //在p位置插入字符串s
string &replace(int p, int n,const char *s); //删除从p开始的n个字符,然后在p处插入串s
string &erase(int p, int n); //删除p开始的n个字符,返回修改后的字符串
string substr(int pos = 0,int n = npos) const; //返回pos开始的n个字符组成的字符串
void swap(string &s2); //交换当前字符串与s2的值
string &append(const char *s); //把字符串s连接到当前字符串结尾
void push_back(char c) //当前字符串尾部加一个字符c
const char *c_str()const; //返回一个以null终止的c字符串,即c_str()函数返回一个指向正规C字符串的指针, 内容与本string串相同,用于string转const char*
2.vector -- STL:
- 定义方法:#include
- 使用方法:
- 1>. a.size() //获取向量中的元素个数
- 2>. a.empty() //判断向量是否为空
- 3>. a.clear() //清空向量中的元素
- 4>. 复制
a = b ; //将b向量复制到a向量中
- 5>. 比较
保持 ==、!=、>、>=、<、<= 的惯有含义 ;
如: a == b ; //a向量与b向量比较, 相等则返回1
- 6>. 插入 - insert
①、 a.insert(a.begin(), 1000); //将1000插入到向量a的起始位置前
②、 a.insert(a.begin(), 3, 1000) ; //将1000分别插入到向量元素位置的0-2处(共3个元素)
③、 vector<int> a(5, 1) ;
vector<int> b(10) ;
b.insert(b.begin(), a.begin(), a.end()) ; //将a.begin(), a.end()之间的全部元素插入到b.begin()前
- 7>. 删除 - erase
①、 b.erase(b.begin()) ; //将起始位置的元素删除
②、 b.erase(b.begin(), b.begin()+3) ; //将(b.begin(), b.begin()+3)之间的元素删除
- 8>. 交换 - swap
b.swap(a) ; //a向量与b向量进行交换
- 创建二维向量:
vector< vector<int> > my_vector(5, vector<int>(10, 0)); //创建一个5*10的int型二维向量 且初始值为0
cout << my_vector[2][1];//访问数组元素
#include<iostream>
#include<vector>
using namespace std ;
int main()
{
vector< vector<int> > b(10, vector<int>(5, 0)) ;
//对部分数据进行输入
cin>>b[1][1] ;
cin>>b[2][2] ;
cin>>b[3][3];
//全部输出
int m, n ;
for(m=0; m<b.size(); m++) //b.size()获取行向量的大小
{
for(n=0; n<b[m].size(); n++) //获取向量中具体每个向量的大小
cout<<b[m][n]<<" " ;
cout<<"
" ;
}
return 0;
}
- 常用函数:
c.back() // 传回最后一个数据,不检查这个数据是否存在。
c.begin() // 传回迭代器中的第一个数据地址。
c.capacity() // 返回容器中数据个数。
c.clear() // 移除容器中所有数据。
c.empty() // 判断容器是否为空。
c.end() // 指向迭代器中末端元素的下一个,指向一个不存在元素。
c.erase(pos) // 删除pos位置的数据,传回下一个数据的位置。
c.erase(beg,end) //删除[beg,end)区间的数据,传回下一个数据的位置。
c.front() // 传回第一个数据。
c.insert(pos,elem) // 在pos位置插入一个elem拷贝,传回新数据位置。
c.insert(pos,n,elem) // 在pos位置插入n个elem数据。无返回值。
c.insert(pos,beg,end) // 在pos位置插入在[beg,end)区间的数据。无返回值。
c.max_size() // 返回容器中最大数据的数量。
c.pop_back() // 删除最后一个数据。
c.push_back(elem) // 在尾部加入一个数据。
c.rbegin() // 传回一个逆向队列的第一个数据。
c.rend() // 传回一个逆向队列的最后一个数据的下一个位置。
c.resize(num) // 重新指定队列的长度。
c.reserve() // 保留适当的容量。
c.size() // 返回容器中实际数据的个数。
c1.swap(c2)
swap(c1,c2) // 将c1和c2元素互换。同上操作。
详解vector删除操作:
- 1:在一个数列中用find函数找到某个数,然后删去
//(需要#include <algorithm>)
std::vector<int>::iterator iter=std::find(a.begin(),a.end(),3);
a.erase(iter);
-
2:调用vector类提供的函数
a.erase(a.begin()+2);
-
3:采用遍历向量,用迭代器去删除
vector<int>::iterator it = vec.begin();
for(;it != vec.end();)
{
if(*it == 5)
//删除指定元素,返回指向删除元素的下一个元素的位置的迭代器
it = vec.erase(it);
else
//迭代器指向下一个元素位置
++it;
}