/*函数补充
1.count()函数:这个函数使用一对迭代器和一个值做参数,返回这个值出现次数的统计结果。
int num = count(v.begin() , v.end() , searchValue);
2.count_if()
统计某个条件成立的次数
上代码:
bool g(int value){ //返回真假的一个函数
return value >10;
}
int main(){
vector<int> v1;
vector<int>::iterator Iter;
v1.push_back(10);v1.push_back(20);
v1.push_back(10);v1.push_back(20);
vector<int>::size_type r;
//调用vector容器中的sizetype字段,而sizetype字段被定义为unsigned int
//可以直接定义成 int 或者 unsigned int
r = count_if(v1.begin(), v1.end(), g);
//三个参数:两个迭代器
//一个真假值,如果真就被计数 如果假,不管
cout << r << endl;
return 0;
}
3.assign()
first.assign(7,100); // 给first添加7个值为100的元素
second.assign(first.begin(), first.end());// 复制first给second
4.remove 删除特定的值 remove_if //按条件删除
remove(b,e,v) //[b,e) 删value
int myints[] = {10,20,30,30,20,10,10,20}; // 10 20 30 30 20 10 10 20
vector<int> vec(myints,myints+8);
vector<int>::iterator pend,iv;
//删干净
pend = remove (vec.begin(), vec.end(), 20); // 10 30 30 10 10 ? ? ?
// ^ ^
//pend:在结尾位置
remove_if(b,e,p) //[b,e) 删p条件
remove_if(beg, end, op)
//移除区间[beg,end)中每一个“令判断式:op(elem)获得true”的元素;
//op作为一个函数名
remove_copy(b,e,r,v) //[b,e) 删v,结果存入r
remove_copy_if(b,e,r,p) //[b,e) 删p条件,结果存入r
1、并不是真正的删除,而是把后面的元素向前移动,覆盖被删除元素
2、返回新的逻辑终点
5.unique() //删除重复值
//功能是去除相邻的重复元素(只保留一个),所以使用前需要对数组进行排序
//它并没有将重复的元素删除,而是把重复的元素放到数组的最后面藏起来了
//需要首尾迭代器作为参数
vector<int>::iterator it = unique (v.begin(), v.end() );
v.erase (it, v.end() );//这里就是把后面藏起来的重复元素删除了
unique(a,a+n) - a返回的是去重后的数组长度
6.merge //合并有序
merge(first1,last1,first2,last2,result,compare);
//firs1t为第一个容器的首迭代器,
//last1为第一个容器的末迭代器,
//first2为第二个容器的首迭代器,
//last2为容器的末迭代器,
//result为存放结果的容器,第三个容器
//comapre为比较函数(可略写,默认为合并为一个升序序列)。
注:.merge(list &x); //会将列表x中的元素按默认的顺序
//移入当前列表当中,此时列表x为空,当前列表仍为有序列表
list<double> first, second;
first.sort();
second.sort();
first.merge(second);
//结果 :first有序包含second second空
7.sort //排序 reverse //逆序:
sort(vect.begin(), vect.end());//自动排序
sort(vect.begin(), vect.end(), cmp);//按照cmp函数提供的规则排序
bool cmp(int a,int b) {
return a > b;
}//降序
reverse(b,e) //逆转区间数据
8.advance()
std::vector<int>::iterator it;
auto vi;
vi= v.begin();
vi = vi+5 <==> advance(vi,5);
9.auto 关键字
auto可以在声明变量的时候根据变量初始值的类型自动为此变量选择匹配的类型
10.lower_bound() upper_bound()
lower_bound(Iter first, Iter last,const _Tp& val)
返回一个非递减序列[first, last)中的第一个大于等于值val的位置。
upper_bound(Iter first, Iter last, const _Tp& val)
返回一个非递减序列[first, last)中第一个大于val的位置。
11.ostream_iterator / copy
int main() {
const int SIZE = 5;
int a[SIZE] = {1,2,3,4,5 };
vector<int> v (a,a+5); //构造函数
try {
v.at(100) = 7;
}
catch( out_of_range e) {
cout << e.what() << endl;
}
cout << v.front() << “,” << v.back() << endl;
v.erase(v.begin());
ostream_iterator<int> output(cout ,“*");
//定义了一个 ostream_iterator 对象,可以通过cout输出以 * 分隔的一个个整数
copy (v.begin(),v.end(),output);
//导致v的内容在 cout上输出
v.erase( v.begin(),v.end()); //等效于 v.clear();
if( v.empty ())
cout << "empty" << endl;
v.insert (v.begin(),a,a+SIZE);
copy (v.begin(),v.end(),output);
}
// 输出:
invalid vector<T> subscript //输出的错误信息
1,5 //
2*3*4*5*empty
1*2*3*4*5*
copy (v.begin(),v.end(),output);
first 和 last 的类型是 vector<int>::const_iterator
output 的类型是 ostream_iterator<int>
12.stable_sort
实际上是归并排序(将两个已经排序的序列合并成一个序列),
特点是能保持相等元素之间的先后次序
stable_sort 用法和 sort相同
排序算法要求随机存取迭代器的支持,所以list 不能使用排序算法,要使用list::sort
13.substr有2种用法:
假设:string s = "0123456789";
string sub1 = s.substr(5); //只有一个数字5表示从下标为5开始一直到结尾:sub1 = "56789"
string sub2 = s.substr(5, 3); //从下标为5开始截取长度为3位:sub2 = "567"
*/