//主要是北京acm视频里的
#1.用谁 谁效率高 数据量高时 用谁(scanf)
谁好写 用谁(控制输出小数时,用printf)
#2.写题时可以不释放动态开辟的内存
#3.
有点像类
结构体前的struct是可以省的 , 不用再写typedef了
结构体里面可以加构造函数,应该是赋值用的把,可以有默认值,这个函数不用写类型
#4.库
#include#include using namespace std; int main() { char str3[100]; memset(str3, 0, sizeof(str3)); cout << str3 << endl; cout << strlen(str3); return 0; }
memset填充时是按字节填充的,这里每个字节都填0,字符又是按ascii码来的,所以不显示,长度为0(字符串以这个为结束标志的),据说memset要比for(自己写的)快
c的这个快排调用复杂
c++的
#include#include using namespace std; int main() { vector list; list.push_back(1); list.push_back(2); list.push_back(3); cin.get(); cin.get(); }
vs确实好用,打断点后是鼠标移到list这里是可以看见val是多少的
vector更像是数据类型(也可以说是类罢,毕竟都有push_back的函数了)把,不像c的库是函数,可以说是链表(动态开辟)+数组(下标访问)
#include#include using namespace std; int main() { vector arr(100); vector list; //for (int i = 0; i < 100; i++) //{ // scanf("%d", &arr[i]);//scanf非法输入就会停止 // cout << arr[i] << endl;//是有默认值的为0 //} for (int i = 0; i < 10; i++) { int a; cin >> a; list.push_back(a); // 报越界的错误了 cout << list[i] << endl; } cin.get(); cin.get(); return 0; }
两种vector,一种给长度了,对应两种输入方式
#include#include using namespace std; int main() { // 数组可以这样遍历用指针 vector arr1(100); for (int i = 0; i < 10; i++) { scanf("%d", &arr1[i]); cout << arr1[i] << endl; } vector ::iterator p2; for (p2 = arr1.begin(); p2 != arr1.end(); p2++) { cout << *p2 << " "; } cout << endl; return 0; }
又是一天qaq玩了半天睡了半天呜uu五五五五
又认识了2个函数,begin和end , p2!=arr1.end 这里end是最后一个元素的后面 换成字符串应该就是后面那个
#include#include using namespace std; int main() { vector arr1(100); vector ::iterator p; scanf("%c", &arr1[0]); scanf("%c", &arr1[1]); printf("%d", arr1.size()); return 0; }
我这里arr.size()不管输入还是没输入,还是字符数组,都是整个vector数组的大小,但是申请vector时不给大小就不是这样la,看底下
#include#include using namespace std; int main() { vector list; vector ::iterator p; list.push_back(1); printf("%d", list.size()); return 0; }
不给大小或许 才是 vector的精髓罢
注意大小是101,int也是,而且clear对这种(给定大小的)是有用的,empty取决于size的值 , 上面错了我没看见push——back呜呜呜呜呜呜呜呜,实际大小就是一百
但vector
arr1(100),再push的话是放后面,也算误打误撞了
erase我不会用一用就运行时报错, 会力 原来是erase后 迭代器变成野迭代器了,没法进行++了 erase有返回值的 为下一个
string1:可以看成vector
2:可以连接两个字符串,且比c的简单
3:初始化上和c的字符数组差不多
Bjarne在他的The C++ Programming Language里面给出过一个助记的方法:把一个声明从右向左读。
char * const cp; ( * 读成 pointer to ) cp is a const pointer to char const char * p; p is a pointer to const char; char const * p;同上因为C++里面没有const*的运算符,所以const只能属于前面的类型。
insert那是o(n)的
vector的size是o(1)的,有专门存的东西
algorithm算法更多是提供了函数和c的头文件有点像
vector没有指针一说,有的只是迭代器
#include#include #include using namespace std; int arr[] = {5,4,3,2,1}; vector arr1{ 2,3,1,4,5 }; int main() { sort(arr1.begin(), arr1.end()); return 0; }
sort这里结束的是最后一个元素的下一位



