主要介绍两种重要的标准库 string 和 vector 还有内置数组类型。
using声明具有以下格式:using namespace::name;
#include
using std::cin;
int main()
{
int i;
cin >>i; //正确:cin和std::cin含义相同
cout<<i; //错误:没有指定那个命名空间
return 0;
}
个人理解:命名空间就相当于一个仓库,描述仓库里面的东西需要指定仓库,要不对方不知道是哪个仓库的东西。
标准库类型string: 表示可变长的字符串序列,使用string类型必须首先包含string头文件:
#include
using namespace std::string;
#include
#include
using namespace std;
using namespace std::string;
int main()
{
string s1; //默认初始化,s1是一个空串
string s2(s1); //s2是s1的副本
string s2=s1; //等价于s2(s1),s2是s1的副本
string s3("value"); //s3是字面值"value"的副本,除了字面值最后的那个空字符外
string s3="value"; //等价于s3("value"),s3是字面值"value"的副本
string s4(n,'c'); // 把s4初始化为由连续n个字符c组成的串
}
string s5="hiya"; //拷贝初始化
string s6("hiya"); //直接初始化
string s7(10,'c'); //直接初始化
#include
#include
using namespace std;
int main()
{
string s; //空字符串
cin>>s; //将string对象读入s,遇到空白停止
cout<<s<<endl; //输出s
return 0;
}
#include
#include
using namespace std;
int main()
{
string word;
while(cin>>word) //反复读取,直至到达文件末尾
{
cout<<word<<endl; //逐个输出单词,每个单词后面紧跟一个换行
}
return 0;
}
#include
#include
using namespace std;
int main()
{
string line;
while(getline(cin,line)) //每次读取一整行
{
cout<<line<<endl; //输出整行
}
return 0;
}
#include
#include
using namespace std;
int main()
{
string line;
while(getline(cin,line)) //每次读取一整行
{
if(!line.empty()&&line.size()>80) //如果不为空 并且 字符数大于80
{
cout<<line<<endl; //输出整行
}
}
return 0;
}
string s1="hello,",s2="world\n";
string s3=s1+s2; //s3的内容是hello,world\n
s1+=s2; // 等价于 s1=s1+s2
这段需要看标准库了,上面的已经够用了。
标准库类型vector 表示对象的集合,其中所有对象的类型都相同。因为vecotr容纳着其他对象,所以他们也被称作容器。
#include
#include
using namespace std;
int main()
{
vector<int> iVector; //初始状态为空
vector<string> sVector //初始化为空
//列表初始化
vector<string> articles={"a","an","the"};
//创建指定数量的元素
vector<int> iVector(10,-1); //10个int类型的元素,每个初始化为-1
}
#include
#include
using namespace std;
int main()
{
vector<int> iVector; //空vector对象
//增加
for(int i=0;i<=100;i++)
{
iVector.push_back(i);
}
//遍历
for(int value in iVector)
{
cout<<"value"<<value<<endl;
}
return 0;
}
注意:只能对确知已存在的元素才能执行下标操作
数组可以理解为大小不变的标准库类型vector的数据结构。
unsigned cnt=1024; //不是常量表达式
constexpr unsigned sz=1024; //常量表达式
int arr[10]; //含有10个整数的数组
int *parr[sz]; //含有10个整数指针的数组
string bad[cnt]; //cnt不是常量表达式
string strs[get_size()]; //当get_size是constexpr时正确;否则错误
/**
*显示初始化数组
*/
const unsigned sz=3;
int iArr[sz]={0,1,3};
int arr[]={0,1,3};
char a1[]={'c','+','+'}; //列表初始化,没有空字符串
char a2[]={'C','+','+','\0'}; //列表初始化,含有显示的空字符串
char a3[]="C++"; //列表初始化,含有隐式的空字符串
const char a4[6]="Daniel"; //错误:没有空间可存放空字符串
int a[]={0,1,2}; //含有3个整数的数组
int a2[]=a; //错误: 不允许使用一个数组初始化另一个数组
a2=a; //错误:不能把一个数组直接赋值给另一个数组
unsigned scores[11]={}; //11个分数段,全部初始化为0
unsigned grade;
while(cin>>grade)
{
if(grade<=100)
{
++scores[grade/10]; //将当前分数段的计算值加1
}
}
在大多数表达式中,使用数组类型的对象其实是使用一个指向该数组首元素的指针
string nums[]={"one","two","three"};
string *p=&nums[0]; //等价于 *p=nums;
int arr[]={0,1,2,3,4,5,6,7,8,9};
int *p=arr;
++p;
cout << "++p:" << *++p << endl;