引用:为对象起了另一个名字,引用类型引用另外一种类型。通过将声明符写成&d的形式来定义引用类型,其中d是声明的变量名。
int val = 1024;
int &refVal = val;
//refVal == val
//引用即别名
无法令引用重新绑定到另外一个对象上,所以引用必须初始化;
指针:指针也实现了对其他对象的间接访问,指针就是一个对象,允许对指针赋值和拷贝,而且在指针的生命周期内它可以先后指向几个不同的对象。指针无需在定义时赋值。
利用指针访问对象:如果指针指向了一个对象,则允许使用解引用符( * )来访问该对象
int val = 42;
int *p = &val;
*p = 2;
//val == 2;
读写string对象:
int main(){
string s;
cin >> s;
cout << s << endl;
return 0;
}
在执行读取操作的时候,string对象会自动忽略开头的空白(即空格符、换行符、制表符等)并从第一个真正的字符开始读起,直到遇到下一处空白为止。
使用getline 读取一整行;
函数getline的参数是一个输入流和一个string对象,函数从给定的输入流中读入内容,直到遇到换行符为止(换行符也被读进去了),然后把所读的内容存到那个string对象中去(换行符不存进去),getline只要一遇到换行符就停止
int main(){
string line;
while(getline(cin,line))
cout << line << endl;
}
string的empty和size:
empty函数根据string对象是否为空返回一个对应的布尔值
size函数返回string对象中子符的个数
注意:字符串字面值与string是不同的类型
用for输出string对象:
string s("hello world!");
for(auto c : s)
cout << c << endl;
&&运算符:c++语言规定,只有当左侧运算对象为真时才会检查右侧运算对象的情况
vector:是模板而非类型,由vector生成的类型必须包含vector 中元素类型、例如vector<int> 。
能容纳绝大多数类型的对象作为其元素,但是因为引用不是对象,所以不存在包含引用的vector;
push_back():将一个元素加入到vector对象的尾部;
empty():如果对象不含任何元素,返回真,否则返回假;
size():返回对象中元素的个数;
vector对象的下标运算符可用于访问已经存在的元素,而不能添加元素;
迭代器:关键词 iterator
string("some string!");
if(s.begin() != s.end()){
auto it = s.begin();
*it = topper(*it);//将当前字符改成大写形式
}
输出结果:Some string!
使用迭代器完成二分查找:
//text必须是有序的
//beg和end表示我们搜索的范围
auto beg = text.begin(),end = text.end();
auto mid = text.begin() + (end-beg)/2;
//当还有元素尚未查找并且我们还没有找到sought时
while(mid != end && *mid != sought){
if(sought<*mid)
end = mid;
else
beg = mid+1;
mid = beg + (end-beg)/2;
}