目录
一、命名空间的using声明
1. 目前大多数库函数都来源于 命名空间std,e.g:cin、cout
使用using就不用再加前缀了,头文件不应该加using
#include<iostream>
using std::cin;
int main(){
int i;
cin >> i;
return 0;
|main函数必须返回int类型的数
}
2. 标准库类型string表示可变长的字符序列,string包含在命名空间std中,所以都先这样实现声明:
#include <string>
using std::string;
|初始化一个空字符串
string s1;
|直接初始化一个除了空字符的串
string s2("value");
|拷贝初始化
string S3 = "hiya";
|初始化一个由连续n个字符c组成的串
string s3( n, 'c');
二、 string
1. string的读写:自动去除空白(空格、换行符、制表符...),遇到空白停止
2. 持续读写:while(cin >> word)
3. 使用getline读取一整行,保留空白符
4. empty判空,size判断长度
#include <string>
using std::string;
main(){
while (getline(cin, line))
if (!line.empty())
cout << line << line.size() << endl;
}
5. string的比较( == 、!= 、>、< ...)是大小写敏感的,若对应位置的字符不同,则> <结果是看第一个不同的字符的结果
6. 字符值和string对象相加,必须确保“ + ”两边至少一个string对象
string s2 = "world";
|错!hello和,都是字面值
string s = "hello" + ',' + s2;
7. 改变字符串中的字符
◇ 必须使用 “ & ”引用,以改变s 的值
◇ 用“ auto ”让编译器来决定c的类型,这里就是char
string s("Hello World");
for (auto &c : s)
c = toupper(c);
cout << s <<endl;
| HELLO WORLD
8. 利用下标:size_type 执行 随机访问;转16进制
|不打算改变,所以设为常量
const string hexdigits = "0123456789ABCDEF";
cout << "Enter a series of numbers between 0 and 15" << endl;
string result;
string :: size_type n ; //用于保存输入的数字
while (cin >> n) //只要持续输入
if(n < hexdigits.size())
result += hexdigits[n];
cout << "number" << result << endl;
9.
strlen(p) 返回p的长度
strcmp(p1 ,p2 ) 比较大小
strcat(p1 ,p2 ) 把p2连接到p1上
strcpy(p1 ,p2 ) 将p2拷贝给p1,返回p1
三、 vector
vetor = 容器,是一个类模板,模板本身不是类或者函数,生成类或函数的过程称作实例化,实例化的过程需要指定类型
1. 经常会先定义一个空vector,然后运行时再往里加,指定vector的类型
vetor<string> svec;
2. 直接初始化
◇ 列表初始化:只能用花括号;
◇ 圆括号是用来指定vector的容量的,所有元素都一样
◇ 一个vector是另一个的副本
#include <vector>
#include <string>
using std::vector;
using std::string;
|列表初始化
vector<string> v1{"a" , "an" , "the"};
|设置容量和元素的初值
vector<int> v3(10 ,1) //v3中有10个元素,每个的值都是1
3. push_back()函数:读取未知数量的元素
#include <string>
#include <vector>
#include <iostream>
using std::string;
using std::vector;
using std::cin;
string word
vector<string> t;
while(cin >> word){
t.push_back(word)
}
4. 非空vector可以直接利用下标访问,空vector只能用push_back()
vector<unsigned> socres(11,0)
cin >> grade;
++scores[grade/10]
vector<int> invec;
cin >> ix;
ivec.push_back(ix);
5. 使用数组初始化vector对象
#include <vector>
#include <iterator>
int int_arr[] = {0, 1, 2, 3, 4};
vector<int> ivec(begin(int_arr),end(int_arr));
四、数组
1. 数组不允许拷贝和赋值
int a[] = {0 ,1 ,2 };
|不允许使用一个数组初始化另一个
int a2[] = a;
|数组不允许赋值
a2 = a;
2. 指针和数组
◆ 用下标得到数组的指定元素
string nums[] = {"one" ,"two" ,"three" };
string *p = &nums[1];
◆ 自动转化为指向数组的first元素
string nums = {"one" ,"two" ,"three"};
string *p2 = nums;
◆ 利用标准库函数 begin() 和 end()获得指向首元素的指针和指向尾元素的指针
#include <iostream>
#include <iterator> //begin和end函数定义在iterator文件中
using namespace std;
int ia[] = {0,1,2,3,4,5,-10,6,7,8};
//begin函数返回指向ia首元素的指针,end函数返回指向ia尾元素下一位置的指针。
int *beg = begin(ia);
int *last = end(ia);
3. 指向多维数组的指针
int a[3][4];
|p指向含有4个int的数组
int (*p)[4] = a;
|≠ int指针的数组
int *ip[4];
|这里指向a的最后一行
p = &a[2];