随手笔记
二分查找
lower_bound
lower_bound( begin,end,num):从数组的begin位置到end-1位置二分查找第一个大于或等于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。
upper_bound
upper_bound( begin,end,num):从数组的begin位置到end-1位置二分查找第一个大于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。
binary_search
binary_search(起始地址,结束地址,要查找的数值) 返回的是是否存在这么一个数,是一个bool值。
pair<>
返回两个参数
auto [count0, count1] = count(s);
pair<int, int> count(const string & s) {
.....
return make_pair(count0, count1);
}
容器
公共部分的API
sort
sort(nums.begin(), nums.end(), greater<int>()); // 降序排列
sort(nums.begin(), nums.end(), less<int>()); // 升序排列
begin() end()
size()
Return Value
返回类型为无符号整型,容器大小
empty()
Return Value
如果容器大小为零,则返回true,否则返回false
string
find()
string str = "abc";
if (str.find("ab") != string::npos) {
cout << "is ok!" << endl;
}
if (str.find('a') != str.npos) {
cout << "is ok!" << endl;
}
push_back()
stoi() stol() stoll()
stof() stod()
to_sting()
substr()
priori_queue
大顶堆
//对于基础类型 默认是大顶堆
priority_queue<int> a;
//等同于 priority_queue<int, vector<int>, less<int> > a;
小顶堆
priority_queue<int, vector<int>, greater<int> > c; //这样就是小顶堆
公共API
empty
Test whether container is empty (public member function )
size
Return size (public member function )
top
Access top element (public member function )
push
Insert element (public member function )
emplace
Construct and insert element (public member function )
pop
Remove top element (public member function )
swap
Swap contents (public member function )
1.vector
关于初始化
vector<int> v = {
5,10,15}; // 初始化元素
vector<int> v(10, 0); // 初始大小及初始值
sort(vector.begin(), vector.end()); // 排序
push_back()
// vector::push_back
#include <iostream>
#include <vector>
int main ()
{
std::vector<int> myvector;
int myint;
std::cout << "Please enter some integers (enter 0 to end):\n";
do {
std::cin >> myint;
myvector.push_back (myint);
} while (myint);
std::cout << "myvector stores " << int(myvector.size()) << " numbers.\n";
return 0;
}
pop_back()
// vector::pop_back
#include <iostream>
#include <vector>
int main ()
{
std::vector<int> myvector;
int sum (0);
myvector.push_back (100);
myvector.push_back (200);
myvector.push_back (300);
while (!myvector.empty())
{
sum+=myvector.back();
myvector.pop_back();
}
std::cout << "The elements of myvector add up to " << sum << '\n';
return 0;
}
insert
注意
- 可将一个数组直接加入到vector中
- 将一个vector加入到另一个vector中
// inserting into a vector
#include <iostream>
#include <vector>
int main ()
{
std::vector<int> myvector (3,100);
std::vector<int>::iterator it;
it = myvector.begin();
it = myvector.insert ( it , 200 );
myvector.insert (it,2,300);
// "it" no longer valid, get a new one:
it = myvector.begin();
std::vector<int> anothervector (2,400);
myvector.insert (it+2,anothervector.begin(),anothervector.end());
int myarray [] = {
501,502,503 };
myvector.insert (myvector.begin(), myarray, myarray+3);
std::cout << "myvector contains:";
for (it=myvector.begin(); it<myvector.end(); it++)
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
}
resize
// resizing vector
#include <iostream>
#include <vector>
int main ()
{
std::vector<int> myvector;
// set some initial content:
for (int i=1;i<10;i++) myvector.push_back(i);
myvector