标签:判断 UNC 完全 自动 == cin 代码 养成 成员
1、命名空间的using 声明
每个名字都需要一个using 声明,使用using 后就不需要再使用“std::”作用域
如:
include <iostream>
include<string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
int main()
{
cout<<"Enter two numbers:"<<endl;
}
注意:在头文件中,必须总是使用完全限定的标准库名字,即保留std::cin这样的作用域操作,头文件中应该只定义确实必要的东西,要养成这样的良好习惯。
2、标准库string 类型和字符串字面值不一样
string 是一种类,里面带有构造函数
字符串面值只是一串常量,加上“\0”空字符,所以要区分两者的使用
3、读取string,忽略开头的所有空字符,当再次遇到空字符时,则读取终止
4、读入未知数目的string 对象
string word;
while(cin >> word)
{
cout << word << endl;
}
// Window 的系统结束符是同时按下CTRL+Z
5、用get line 可以读取整行文本
但是getline函数返回时丢弃换行符,只要getline遇到换行符,则停止读入并返回
string word;
while( getline(cin , word) )
{
cout << word << endl;
}
6、string 的操作
string st("The expense of spirit\n")
if ( st.empty( ) ) …… 判断st字符串是否为空
if (st.size( ) == 0) ……判断st字符串是否为空
注意:size 函数返回的是 string::size_type 类型,不要把size 的结果赋值给一个int 变量。
size_type 类似一种unsigned 类型,存储的范围可能远大于int
string s1="hello";
unsigned int length,length2;
length = s1.size( );// length = 5;
length2 = sizeof("hello");// length = 6; 包含一个结尾的空字符
7、string 的关系操作符
string 对象在做比对的时候,会区分大小写,大写的字母比小写的字母小
如果两串字符不一样,则第一个不同的字母比大小。
8、string 对象和字符串面值的连接
string与字符串相加,+的左右字符至少有一个string 对象。如
string s1="hello";
s1=s1+","+"world"; //s1+","会返回一个string,然后再与world相加
s1="hello"+"world"+s2; //该种定义是错误的
9、通过下标(索引)获取string 中的字符
string bookname="HELLO";
string::size_type ix;
ix= 0;
cout<<bookname[ix]; // 输出的结果是“H”
ix= bookname.size( );
cout<<bookname[ix-1]; // 输出的结果是"O"
10、i++和++i的区别
在有些代码行里面就有区别了,比如:
a=5;x=a++; 经过这一句后x=5,a=6;
但是如果是:a=5;x=++a;经过这一句后,x=6,a=6;
有了 C++ 之后,因为 ++itr 和 itr++ 有了显著的区别。
而 ++itr 从任何意义上讲,都比 itr++ 要好。(有些对象甚至就只能前++)
如果真的要统一代码格式的话,就都统一成 ++i 要好一些,
因为对于 C 来说,它没有任何区别,对于 C++ 来说,却大不相同。
11、string 对象中字符的处理
有很多的函数可以用于处理string 对象中的字符,主要包含在cctype 头文件中
具体详见C++ P77进行查阅。
如统计语句中标点符号的数量:
string s("Hello world!!!");
string::size_type pucnt = 0;
for(string::size_type i=0; i!=s.size(); ++i)
{
if ( ispunct(s[i]) ) ++pucnt;
}
cout << puncnt_cnt << endl;
这些函数用于处理标点、转换大小写等操作拥有较大的便利。
12、采用C标准库头文件的C++版本
C的命名方式是name.h,如ctype.h
继承到C++之后就是cname,如cctype,不需要加后缀h,这样,所有的名字都包含在名字空间std中,
就不会给程序带来负担。
13、VECTOR类型,vector 又称为容器,是一种类型对象的集合。vector 是 一个类模板。
使用vector 之前要包含相应的头文件。
#include <vector>
using std::vector;
vector <int> ivec; // ivec是含有若干个int类型对象的vector
//vector的<>里面的是集合的类型,<>后跟着集合的名称
14、vector的定义和初始化
vector <int> ivec1;
vector <int> ivec2(ivec1);
vector <int> ivec3(10,-1); //10个元素,每个元素初始化值为-1
vector <int> ivec4(20); //20个元素,int 自动初始化为0
15、vector 对象的操作,与string 类似
v.empty() ; //判断是否为空
v.size() ; //判断有多少元素,返回的值与string一样,用vector <int> :: size_type表示
v.push_back(t) ; //在vector的末尾增加一个值为t的元素
v[n] //vector中第n个元素,该类下标的操作,从0开始,下标的类型为 vector <int> :: size_type n
注意:必须是已存在的元素,才能用小标操作,否则是违规操作。
16、迭代器简介
现代C++程序更倾向于使用迭代器而不是下标操作访问容器元素。
每种容器的类型都定义了自己的迭代器类型
如:
vector<int>::iterator iter;
17、迭代器的begin和end操作
vector<int>::iterator iter= ivec1.begin(); // begin()相当于取第一个元素的下标,0
ivec1.end() ; // end()取的是最末尾元素的下一个标号,指向一个不存在的元素,表示已经处理完所有的元素
18、迭代器的解引用运算
vector<int>::iterator iter= ivec1.begin();
*iter= 0; //指向第一个元素
ivec1[0]=0; //两条语句的运算结果是一样的,同时Iter的自增使用++i
++iter; //指向第二个元素
19、区分const 和const_iterator
const_iterator可用于读取容器中的值,但不能进行写操作,例如
vector<int>::const_iterator cit=nums.begin();
cout<<*cit<<endl; //输出第0个成员,假设nums里面存放的数据超过3个
++cit;//cit 可以进行递增的操作
cout<<*cit<<endl;//输出第1个成员
const vector则是指迭代器为常量,就不能进行如上面的自增操作。
vector<int> nums(10);
const vector<int>::iterator cit=nums.begin();
*cit = 1;// 将第0个成员,赋值为1,操作到此为止,如果再进行++cit则会报错;
20、迭代器的算术操作
①iter+n
iter-n // 运算后,iter的值必须指向vector 中的某个元素,或者末端的后一个元素
②iter1-iter2 //iter1、iter2必须是指向同一个vector的迭代器,这个用于计算2个迭代器的距离
//该距离的名称叫difference_type
// iter1和iter2都必须是指向vector的某个元素,或者末端的后一个元素
注:末端的后一个元素就是nums.end()所指向的位置
当vector经过长度的操作,如push_back操作后,迭代器的值失效,需要重新进行制定
21、
C++ 标准库类型
标签:判断 UNC 完全 自动 == cin 代码 养成 成员
原文地址:https://www.cnblogs.com/lnleelove/p/9751797.html