C++ Leetcode 做题笔记
string
//添加元素
string s;
string s1;
s.push_back('a');
s.append(s1,pos,len);//将s1从pos位置起的len个元素连接到s后
s += s1;//将s1连接到s后
//字符串长度:
int len = s.size();
int len = s.length();
//判断字符串是否为字母+十进制数字
isalnum(s);//返回bool变量
//将字符串string转换大小写
tolower(s)/toupper(s);//小写、大写
字符串比较:
4. 若参与比较的两个串值相同,则函数返回 0;若字符串 S 按字典顺序要先于 S2,则返回负值;反之,则返回正值。
string A ("aBcdef");
string B ("AbcdEf");
string C ("123456");
string D ("123dfg");
//下面是各种比较方法
int s=A.compare(A);//返回0
int m=A.compare (B); //完整的A和B的比较,返回1
int n=A.compare(1,5,B,4,2); //"Bcdef"和"AbcdEf"比较,返回-1
int p=A.compare(1,5,B,4,2); //"Bcdef"和"Ef"比较,返回-1
int q=C.compare(0,3,D,0,3); //"123"和"123"比较,返回0
string s1("abc");
string s2("abc");
bool f = s1 == s2;
字符串反转:
string s = "hello";
reverse(s.begin(),s.end());
char
char a;
char s[];
//判断字符是否为字母+十进制数字
isalnum(a);//返回bool变量
//将字符转换大小写
tolower(a)/toupper(a);//小写、大写
//char数组反转
char s[]="hello";
strrev(s);
cout<<s<<endl;
vector
- 删除
//删除指定位置的元素
v.erase(pos);//删除位置pos的元素
v.erase(v.begin()+i);//删除第i个元素 i=0~v.size()-1
v.erase(first, last);//删除[first, last)范围内的元素
//erase-remove方法删除指定值的元素
remove(first,last,value);//删除[first, last)范围内值为value的元素
v.erase(remove(v.begin(),v.end(),num),v.end());//删除[first, last)范围内值为num的元素
- 查找
//找到vector中的指定元素
//以vector<int>为例
vector<int>::iterator i;
i = find(v.begin(),v.end(),num);//返回了num所在的地址,若没找到,则i = v.end()
//找到vector中的指定元素的个数
int n = count(v.begin(),v.end(),num);//返回了v中所有num的个数
关于二进制的计算
//计算 x 的二进制表示中 1 的个数
需要注意的是,__builtin_popcount() 是一个编译器内置函数,它只在特定的编译器中有效。在其他编译器中,可能需要使用其他方式实现相同的功能。
int __builtin_popcount(unsigned int x);
哈希函数
- unordered_map
unordered_map内部实现了一个哈希表 (也叫散列表,通过把关键码值映射到Hash表中一个位置来访问记录,查找的时间复杂度可达到O(1),其在海量数据处理中有着广泛应用)。因此,其元素的排列顺序都是无序的。
创建
//需要的头文件
#include<map>
#include<unordered_map>
//构造函数
std::unordered_map<Key, T> myMap; //创建一个空的unordered_map对象,键的类型为Key,值的类型为T。
unordered_map<int, int> myMap;//初始值为0
访问和修改
//访问键321对应的值
myMap[321];
//修改键321对应的值,使之加一
myMap[321]++;