CPP常用库函数以及STL

摘要:
=干草堆。end())std::cout˂˂“thefirstmatches:”˂˂*it˂˂'';return0;}常用库函数sortRocation:算法函数:对数组进行排序+1或+n+1是地址偏移量,表示要排序的范围。它也可以被其他STL迭代器替换。Cmp是一个自己编写的函数。其格式如下:boolcmp{//Comparison方法。如果a应在b之前,则返回true。__gcd位置:算法函数:查找两个整数的最大公约数。memset位置:cstring函数:将内存间隔的每个字节分配给给定的数字。可以将任何值分配给字符数组。

其他操作

memset

void * memset ( void * ptr, int value, size_t num );
memset(ptr,0xff,sizeof(ptr));

使用memset初始化vector

vector<int> vec(10,1);
memset(vec.data(),0,vec.size()*sizeof(int));
#include<bits/stdc++.h>

CPP常用库函数以及STL第1张

需要注意的是:对于set和map而言,find并不是第一个满足条件的对象位置,而是其中的任意一个对象。

Standard Template Library: Algorithms

全排列

序列升序

next_permutation(a.begin(), a.end())

序列降序

prev_permutation(b.begin(), b.end())

64int

    long long ll;
	scanf("%I64d", &ll);
	printf("%I64d", ll);

lower_bound(a,a+n,x)

二分查找,查找大于或等于x的第一个位置,只能查找vector<>数组,返回值为vector<>::iterator指针

unique(vector1.begin(),vector1.end())

unique就是让连续的相同值变成一个

binary_search (v.begin(), v.end(), 6, myfunction)

bool myfunction (int i,int j) { return (i<j); }

reverse(vector1.begin(),vector1.end())

find (myvector.begin(), myvector.end(), 30);

An iterator to the first element in the range that compares equal to val.
If no elements match, the function returns last.

equal_range

bounds=std::equal_range (v.begin(), v.end(), 20, mygreater);

bounds.first:is an iterator to the lower bound of the subrange of equivalent values,

bounds.second:its upper bound.

 // 30 30 20 20 20 10 10 10
  //       ^        ^

Non-modifying sequence operations:

for_each

void out(int i){	
	cout << i << endl;
}

int main(){
	int a[] = {1, 2, 3, 5, 4};
	for_each(a, a+5, out);
	
	vector<int> b;
	b.push_back(1);
	b.push_back(2);
	b.push_back(3);
	for_each(b.begin(), b.end(), out);
	return 0;
}

find

    std::vector<int>::iterator it;
    it = find (myvector.begin(), myvector.end(), 30);

find_if

bool IsOdd (int i) {
  return ((i%2)==1);
}

std::vector<int>::iterator it = std::find_if (myvector.begin(), myvector.end(), IsOdd);

find_first_of

bool comp_case_insensitive (char c1, char c2) {
  return (std::tolower(c1)==std::tolower(c2));
}

int main () {
  int mychars[] = {'a','b','c','A','B','C'};
  std::vector<char> haystack (mychars,mychars+6);
  std::vector<char>::iterator it;

  int needle[] = {'D'};

  // using default comparison:
  it = find_first_of (haystack.begin(), haystack.end(), needle, needle+1);

  if (it!=haystack.end())
    std::cout << "The first match is: " << *it << '
';

  // using predicate comparison:
  it = find_first_of (haystack.begin(), haystack.end(),
                      needle, needle+1, comp_case_insensitive);

  if (it!=haystack.end())
    std::cout << "The first match is: " << *it << '
';

  return 0;
}

常用库函数

sort

位置:algorithm
功能:给一个数组(或者一个 STL,这个会在第三章介绍)排序。
格式:sort(a+1,a+n+1,cmp);
说明:
a 是数组的名称,同时也是指向数组首地址的指针。
+1 或者+n+1 为地址偏移量,表示需要排序的范围。
也可以替换为其他 STL 迭代器。
cmp 是自己写的函数,格式如下:
bool cmp(Type a, Type b)
{
//比较方法,如果 a 应该在 b 前则返回 true。
}

unique

位置:algorithm
功能:去除一个容器(也可以是数组)内的所有重复元素。
格式:unique(a+1,a+n+1);
说明:
与 sort 函数类似。

__gcd

位置:algorithm
功能:求两个整数的最大公约数。
格式:__gcd(a,b);
说明:两个参数的类型必须相同。

next_permutation

位置:algorithm
功能:求下一个(字典序)排列
格式:next_permutation(s+1,s+n+1);
说明:
一定要保证参数 s 是一个排列。

strcmp

位置:cstring
功能:比较两个字符串
格式:strcmp(s1,s2)
说明:
相等返回 0,s1 字典序较小返回-1,较大返回 1。

memset

位置:cstring
功能:将内存区间的每一个字节(注意是字节而不是变量)赋值为给定数。
格式:memset(a,0,sizeof(a));
说明:
只能为整数数组赋值为 0/-1。
可以对字符数组任意赋值。

memcpy

位置:cstring
功能:将一个内存区间复制。
格式:memcpy(to,from,sizeof(to));

STL

lower_bound

功能:返回一个非递减序列[first, last)中的第一个大于等于值val的位置。
声明:lower_bound(ForwardIter first, ForwardIter last,const _Tp& val) -arraylistname

upper_bound

功能:算法返回一个非递减序列[first, last)中第一个大于val的位置。
声明:upper_bound(ForwardIter first, ForwardIter last, const _Tp& val)

vector

功能:一个可变大小的数组。
声明:vector<类型> 变量名;
访问:变量名[位置](当数组用即可)
插入:变量名.push_back(变量);
说明:
它的本体是一个对象。

priority_queue

功能:堆
声明:priority_queue<类型> 变量名;
访问:变量名.top();(仅能访问堆顶元素)
插入:变量名.push(变量);
删除:变量名.pop();
说明:
类型需要定义<运算符。
注意 pq 实现的是反人类的大根堆,自定义<号时需要注意实际上是>。

set

功能:集合
声明:set<类型> 变量名;
访问:变量名.find(值);
插入:变量名.insert(值);
删除:变量名.erase(迭代器);
变量名.erase(值);
说明:
单次操作复杂度 O(logn)。

map

功能:映射
声明:map<源类型,目标类型> 变量名;
访问:变量名[源类型值](如果不存在该值则会进行插入。)
说明:
单次操作复杂度 O(logn)。

string

功能:灵活的字符串对象
声明:string 变量名;
赋值:变量名=”C 风格字符串常量”;
合并:变量名+变量名 2(例如 s1=”a”,s2=”b”,s1+s2=”ab”)
求长:变量名.length();(其余 STL 求大小均为变量名.size())
访问:变量名[位置](当数组用)
说明:不能作为 C 风格函数的参数。

免责声明:文章转载自《CPP常用库函数以及STL》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇gulp打包详解NX二次开发-UFUN获取整形输入值uc1608下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C++的标准模板库STL中实现的数据结构之顺序表vector的分析与使用

摘要本文主要借助对C++的标准模板库STL中实现的数据结构的学习和使用来加深对数据结构的理解,即联系数据结构的理论分析和具体的应用实现(STL),本文是系列总结的第一篇,主要针对线性表中的顺序表(动态数组)STL vector进行分析和总结。 引言由于前段时间对台大的机器学习基石和技法课程进行了学习,发现在具体的实现中常常涉及到各种类型的数据结构,比...

C++ 迭代器(STL迭代器)iterator详解

要访问顺序容器和关联容器中的元素,需要通过“迭代器(iterator)”进行,迭代器是一个变量,相当于容器和操作容器的算法之间的中介。迭代器可以指向容器中的某个元素,通过迭代器就可以读写它指向的元素。从这一点上看,迭代器和指针类型。 迭代器按照定义方式分为以下四种: 正向迭代器,定义方式: 容器类名::iterator 迭代器名; 常量正向迭代器,定义方式...

[C++ STL] vector使用详解

一、概述 vector(向量): 是一种序列式容器,事实上和数组差不多,但它比数组更优越。一般来说数组不能动态拓展,因此在程序运行的时候不是浪费内存,就是造成越界。而vector正好弥补了这个缺陷,它的特征是相当于可分配拓展的数组(动态数组),它的随机访问快,在中间插入和删除慢,但在末端插入和删除快。 二、定义及初始化 使用之前必须加相应容器的头文件: #...

算法进阶:0x01 位运算

一、快速幂的模板代码 a^b%p: #include<iostream> using namespacestd; intmain() { inta,b,p; cin>>a>>b>>p; int res = 1 %p; while(b) { if (b &...

数据结构基础之memset---有memset 抛出的int 和 char 之间的转换和字节对齐

今天晚上,在做滤波算法时,里面用到很多float 和int 以及char 之间的类型强制转换,后面滤波完发现图片有些区域块,有过度曝光的白光,我就跟踪,以为是char 字符数字数据溢出问题,加了0-255的判断,然后打印,发现强制转换后的int类型数据多处出现负数,很奇怪,后面写了个测试程序,慢慢的问题出来了 : #include <stdio.h&...

C++ STL hash表用法

C++ STL unordered_map用法 在C++11中,unordered_map作为一种关联容器,替代了hash_map,unordered_map的底层实现是hash表,所以被称为无序关联容器。不管是map还是unordered_map都是一种 key-map(value) 映射的容器,提供非常高的查找效率,下面我们来了解unordered_m...