1.找元素速度快,但可能发生哈希冲突
一般哈希表都是用来快速判断一个元素是否出现集合里。
哈希冲突的解决?
2.Multimap和map的操作类似,唯一区别multimap键值可重复
multiset
3.利用auto减少打字
我们都是用auto
这个关键字来代替一个具体变量的类型定义,让编译器自己去寻找和从它的初始化过程中来推演这个变量的类型。最著名的关于auto
的用法恐怕莫过于用它来躲开一堆长长的类型名,比如STL容器的iterator
,但是它也可以有其他用处:
std::vector<int> nums;
for(auto iter = std::begin(nums); iter != std::end(nums); iter++) {
auto& n = *iter;
n = someFunction();
}
在上边这个例子中,iter
就被推演为类型std::vector<int>::iterator
,然后n
的类型被推演成int&
。需要注意的是n
被显式地声明为引用类型,否则他就是int
类型了。
C++干货系列——谈谈在变量中使用auto - 知乎 (zhihu.com)
4.(fn+右键等于end键 )
光标定位到行首,再按shift+end 选中一行
home+shift+向下箭头,1,小窗,2,收起页面
选中多行:shift+上键或下键
5.优化统计字符串的是否是独立单词的优化思路
出现数组就加一,再出现数组就减一,如果数组最后不全为0,肯定就不咯
6.c++输入输出流?
(81条消息) 【C++】输入输出流(IO流)_c++输入输出流_山舟的博客-CSDN博客
标准输入输出流cin,cout
文件流fstream
void WriteFile()
{
//类似于C语言的用法
//ofstream ofs("write.txt");
//ofs.put('h');
//char msg[] = "ello world";
//int size = sizeof(msg);
//ofs.write(msg, size);
//可调可不调,因为ofs出了作用域后析构函数会自动调用
//ofs.close();
//C++的新用法
ofstream ofs("write.txt");
char c = 'h';
string str = "ello world";
ofs << c << str;//这样就如同文件流一样输出了helloworld
}
字符流sstream
是反的 输入是《
stringstream ss;
ss << a << " " << b;
输出:
#include <sstream>
#include <iostream>
using namespace std;
struct ServerInfo
{
string ip;
int port;
};
int main()
{
stringstream ss;
ServerInfo info = { "192.0.0.1",8081 };
ss << info.ip << " " << info.port;
//将s中的内容又写入newInfo中
//注意:不同项的内容必须以空格或换行结尾,这是C/C++都要求的
ServerInfo newInfo;
ss >> newInfo.ip >> newInfo.port;
return 0;
}
sstream的更多高级应用
(1).把其他类型转化为string类型
(2).实现选择性读取不同的数据类型
(82条消息) sstream用法_南方以北的博客-CSDN博客
7.cin,cout效率不如scanf等?加上即可提升
(81条消息) C++之sync_with_stdio(false)_赵大宝字的博客-CSDN博客
在代码里加上std::ios::sync_with_stdio(false) 这个语句后,cin(cout)速度就会变得和scanf(printf)一样快
eg
-
std::ios::sync_with_stdio(false);
-
for (int i = 0; i < 100000; i++){
-
cout << i << endl;
-
}
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
同时在默认的情况下cin绑定的是cout,每次执行<<操作符的时候都要调用flush,这样会增加IO负担。可以通过tie(0)来解除cin与cout的绑定,进一步加快执行效率。
但是用了sync_with_stdio(false)之后不能与printf和scanf同用,否则会出错,这就涉及到sync_with_stdio(false)的局限性。
因为本来这个函数存在就是可以使cout和printf不冲突
8.输入重定向是什么呢?
那么,什么是重定向呢?在默认情况下,cin 只能接收从键盘输入的数据,cout 也只能将数据输出到屏幕上。但通过重定向,cin 可以将指定文件作为输入源,即接收文件中早已准备好的数据,同样 cout 可以将原本要输出到屏幕上的数据转而写到指定文件中。
9.迭代器的使用?见之前stl学习的文章
课堂5,9日
10.题1 :输入n个元素组成的序列S,请找出一个乘积最大的连续子序列
深搜?
11. 枚举,先减少循环层数,再减少循环变量的范围(数字分析),(逆向思想)
典例