1、原码、反码、补码的概念: 正数的原码、反码、补码是一样的,即看到符号位(第一位)是0,就可以照着写其他两种码;负数的反码符号位不变,数值位分别“按位取反”。负数的补码是原码的反码末位加1。整数的补码才是在计算机中的存储形式。
2、逻辑语句从左到右执行,如果前面的条件语句满足了整个条件,那么后面的语句就不执行了。
3、字符串的赋值问题:
像如图中所采用的的赋值方法都是错误的,编译没有错误,但运行就会奔溃,原因是进入了错误的地址。
原因是如下,有的字符串是不能被修改的。
4、vector的用法
#include
vector
vector
vector
vector
vector
vector
关于vector的若干重要操作:
v.empty() 如果V不含有任何元素,返回真;否则返回假
v.size() 返回V中元素的个数
v.push_back(t) 向V的尾端添加t
v.pop_back() 删除末尾元素
v.insert() 任意位置插入元素
vec.insert(vec.begin()+i,num);//插入完成后新数字的位置就是vec.begin()+i
v.erase() 任意位置删除元素
v.clear() 清空
v.begin() 开始指针
v.end() 末尾指针:得到数组的最后一个单元+1的指针
v[n] 返回V中第N个位置上元素的索引,同数组用法
从键盘获得数字初始化的时候只能是,int n;cin>>n;v.push_back(n);
获取vector元素的方法:也可以直接dian string s = vec[0];
string str;
vector
str = "zhaonan";
vec.push_back(str);
vector
string a = *iter;
vector用作引用:
反转:1、#include
2、std::reverse(a.begin(),a.end())
5.1、stack,继承自vector的栈
c++ stl栈stack的头文件为: #include
c++ stl栈stack的成员函数介绍
empty() 堆栈为空则返回真
pop() 移除栈顶元素
push() 在栈顶增加元素
size() 返回栈中元素数目
top() 返回栈顶元素
5.2、队列
可能需要#include
queue
push() 在末尾加入一个元素
pop() 弹出队列当中第一个值
front()返回队列中第一个元素
back()返回对垒最后一个元素
empty()队列为空时返回真
size()大小
//----------------------------------------- 读取堆栈的栈顶元素
#include
#include
using namespace std;
int main()
{
// 创建堆栈对象
stack s;
// 元素入栈
s.push(3);
s.push(19);
s.push(23);
s.push(36);
s.push(50);
s.push(4);
// 元素依次出栈
while(!s.empty())
{
// 打印栈顶元素,打印出:4 50 36 23 19 3
cout << s.top() << endl;
// 出栈
s.pop();
}
return 0;
}
6 、输入几个数的停止操作,Enter键结束输入。
while(cin >> n){
if (getchar() == '\n')
{
break;
}
}
7、字符串:有两种分别为C-风格字符串和基于string类的字符串
C-风格字符串特殊性质:以空字符结尾,空字符被写作\0,其ASCII码为0。其初始化有三种方式:
char cat[8] = {'f','a','t','e','s','a','\0'}; // 在我眼中'a'就是97,这种方法显式'\0'
char bird[11] = "zhaonan"; // '\0'隐式存在
char fish[] = "Bubbles"; // 编译器自动计算大小
字符串的输入问题:cin使用空白(空格,制表符和换行符)来确定字符串的结束位置。面向行的输入有类(如cin)成员函数:getline()和get(),这两函数都读取一行,直到碰到换行符,前者将丢弃换行符,后者将换行符保留在输入队列中。
getchar();获取输入行中下一个字符
strlen(char *)可获得char *字符串长度,但是sizeof(char *) == 4;
8、常用的algorithm算法
sort(开始指针;结束指针;标志位(默认为从小到大));
sort(numbers.begin(),numbers.end(),hhhhhh); // 其中hhhhhh为bool类型,sort函数就是让首地址和末
地址之间的元素都满足标志位的比较函数
reverse(开始指针;结束指针); // 反转
9、字符串与数字的转换与字符串相加
记得#include
键盘键入数字后转换成string的两种方式:
string s1,s2;
// 方式一,直接cin
cin >> s1 >> s2;
// 方式二,其中x1,x2为整型
//s1 = to_string(x1);
//s2 = to_string(x2);
string类型转换为int类型:int n = atoi(s.c_str());
c_str()函数返回一个指向正规C字符串的指针常量, 内容与本string串相同.
这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。
注意:一定要使用strcpy()函数 等来操作函数c_str()返回的指针。
两个string字符串相加:直接s1+s2;
两个string字符串比较大小:int n = s1.compare(s2); 也可以直接s1 > s2;
string的长度:s1.length(); == s1.size();
string的排序:sort(s1.begin(), s1.end());
string的substr两个用法:
string str.substr(nStart) // 默认 从str字符串nStart位置开始截取到str结束为止
string str.substr(nStart, nLength)// 从str字符串nStart位置开始截取nLength个字符!如果nLength>
剩余的字符则截取到str结束为止
string str("123456asdf");
string strTmp1= str.substr(1); // 获得字符串str中 从第1位开始到结束的字符串,strTmp1值
为:"23456asdf"
string strTmp2 = str.substr(1,5); // 获得字符串s中 从第1位开始的长度为5的字符串,strTmp1值
为:"23456"
初始化:
string str;
str[0] = 'a';
str[1] = 's';
cout << str[0];
这样的方式是不对的
读取一行:getline(cin,str);
字符串反转:
10 set的用法
#include
begin() ,返回set容器的第一个元素
end() ,返回set容器的最后一个元素
clear() ,删除set容器中的所有的元素
empty() ,判断set容器是否为空
max_size() ,返回set容器可能包含的元素最大个数
size() ,返回当前set容器中的元素个数
count() 用来查找set中某个某个键值出现的次数。这个函数在set并不是很实用,因为一个键值在set只可能出现0或1次, 这样就变成了判断某一键值是否在set出现过了
insert()
如何取出set容器中的元素见下面代码:
for(set::iterator iter = ss.begin(); iter != ss.end(); iter++)
vec.push_back(*iter);
11、map
#include
size() 返回元素个数
int FirstNotRepeatingChar(string str) {
int nlength = str.size();
map temp;
int i;
for(i = 0; i < nlength; i++)
temp[str[i]]++;
for(i = 0; i < nlength; i++)
{
if(temp[str[i]] == 1)
break;
}
if(i == nlength)
return -1;
else
return i;
}
可以看出,键是下标,值是对应的内容,值为int时,默认为0;使用[]可以改变通过键改变值,但使用insert函数时不可以有重复的键,否则插不进去。输出
//map内部本身就是按照key的大小顺序进行存储的
for(map::iterator it = temp.begin(); it != temp.end(); it++)
cout << (*it).first << " " << (*it).second << endl;
for(map::iterator it=m.begin();it!=m.end();++it){
cout << it->first << " "<< it->second << endl;
不按键值排序的map:unordered_map,其他一样。 #include
12、关于输出
可以看出标准输入默认保留了6位数字,但有时候会有小数点后4位等要求。
需要#include
double value = 12.3456789;
cout << value << endl; // 默认以6精度,所以输出为 12.3457
cout << setprecision(4) << value << endl; // 改成4精度,所以输出为12.35
cout << setprecision(8) << value << endl; // 改成8精度,所以输出为12.345679
cout << fixed << setprecision(4) << value << endl; // 加了fixed意味着是固定点方式显示,所
以这里的精度指的是小数位,输出为
12.3457
cout << value << endl; // fixed和setprecision的作用还在,依然显示12.3457
cout.unsetf( ios::fixed ); // 去掉了fixed,所以精度恢复成整个数值的有效位数,显示为12.35
cout << value << endl;
cout.precision( 6 ); // 恢复成原来的样子,输出为12.3457
cout << value << endl;
13、i的j次方:pow(i,j);