基本语法

auto:在C++中,auto可以自动推导类型。

1
2
3
4
5
#include <vector>
std::vector <int> v;
//有两种方式可以遍历STL容器
- for (std::vector::iterator it = v.begin();it!=v.end();it++)
- for (auto vtest : v)

&为引用,加&与否取决于是否要修改原值或避免拷贝

  • 需要修改并输出修改后的值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <vector>

std::vector <int> v{0,1,2,3,4,5};

int main(){
for (auto &v1:v)
{
v1 = v1+1;
}
for (auto v1:v)
{
std::cout<<v1<<std::endl;
}
}

建议都加std::

string

1
std::string a(n,c)  //可以生成一个包含n个c的字符串。
1
2
3
4
5
6
7
8
9
10
std::string a.find() //可以找一个你想要东西的位置

std::string abbrevName(std::string name)
{
std::string s = "";
s += toupper(name[0]);
s += '.';
s += toupper(name[name.find(' ')+1]);
return s;
}

STL——set

set 有insert,erase,count,find,size等用法,通常用于查找的时候不用find(因为要返回迭代器的值),而是用count,set底层是红黑树,可以实现自动除重,比如insert(6)两次,只会有一个,所以count()的值只会是0和1;用于判断是否存储在里面。

1
2
3
set.insert();
set.erase();
set.count();

unordered_set和set大体上一样,但是是用哈希表实现的,所以里面是无序的,但是查找很快,O(1)级,set的查找是O(logN);

给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。

1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
int n = nums.size();
set <int> s;
for (auto a:nums){
s.insert(a);
}
int ns = s.size();
if (n!=ns) return true;
return false;
}
};

判断前后两次的size是否相同,不同则有重复插入。

map

map是一个映射,由Key->Value,内部是用pair实现。
常见的用法有

  • m[] = ;
  • m.erase();
  • m.count(); //用于查找有没有值,return1/0;

    可以看到map也像set一样会自动排序,且后来者会覆盖,count返回的是0和1。