C++ STL中最基本以及最常用的類或容器無非就是以下幾個:
- string
- vector
- set
- list
- map
下面就依次介紹一下它們,並給出一些最常見的使用方法,做到最快入門。
string
首先看看我們C語言中一般怎么使用字符串的
//創建指針指向字符串常量,這段字符串我們是不能修改的
char* s1="Hello smartZhou";
//想要創建 可以修改的字符串,我們可以使用數組分配空間
char s2[20]="Hello smartZhou";
或者這樣
char s3[ ]="Hello smartZhou";
//當然我們也可以動態分配內存
char *s4=(char *)malloc(20*size(char));
gets(s4);
C++標准庫中的string表示可變長的字符串,它在頭文件string(注意不是string.h)里面。
#include <string>
用string初始化字符串分兩類:用"="就是拷貝初始化,否則就是直接初始化。
string s1; //初始化字符串,空字符串
string s2=s1; //拷貝初始化,深拷貝字符串
string s3="Hello smartZhou"; //直接初始化,s3存了字符串Hello smartZhou
string s4(10,'a'); //s4存放的字符串的10個a,即aaaaaaaaaa
string s5(s4); //拷貝初始化,深拷貝字符串
string s6("I am smartZhou"); //直接初始化
string s7=string(6,'c'); //拷貝初始化,s7中6個c,即cccccc
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s1; //初始化字符串,空字符串
string s2=s1; //拷貝初始化,深拷貝字符串
string s3="Hello smartZhou"; //直接初始化,s3存了字符串Hello smartZhou
string s4(10,'a'); //s4存放的字符串的10個a,即aaaaaaaaaa
string s5(s4); //拷貝初始化,深拷貝字符串
string s6("I am smartZhou"); //直接初始化
string s7=string(6,'c'); //拷貝初始化,s7中6個c,即cccccc
//string的各種操作
string s8=s3+s6; //將兩個字符串合並成一個
s3=s6; //將s6中的元素賦值給s3,此時s3="I am smartZhou"
cin>> s1;
cout << s2 << endl;
cout << s3 << endl;
cout << s4 << endl;
cout << s5 << endl;
cout << s6 << endl;
cout << s7 << endl;
cout << s8 << endl;
cout << "s7 size = " << s7.size() << endl; //字符串長度,不包括結束符
cout << (s2.empty() ? "This string is empty" : "This string is not empty") << endl;;
system("pause");
return 0;
}
string的IO操作
使用cin讀入字符時,遇到空白就停止讀取。比如程序輸入的是
"Hello World"
那么我們得到的將是"Hello",Hello后面的空格沒了,后面的World也讀不出來。
如果我們想把整個Helo World讀進來怎么辦?那就這樣做
cin>>s1>>s2;
Hello存在s1里面,World存入在s2里面了。
有時我們想把一個句子存下來,又不想像上面那樣創建多個string來存儲單詞,怎么辦?
那就是用getline來獲取一整行內容。
string str;
getline(cin,str);
cout<<str<<endl;
當把string對象和字符變值及字符串面值混在一條語句中使用時,必須確保+的兩側的運算對象至少有一個是string
string s1=s2+"Hello world"; //正確
string s3="s"+"Hello world" //錯誤
string s4="hello"+"world"+s1;//錯誤
string s5=s1+“hello”+"world";//正確 上面式子改一下順序,s1放前面,就正確了,注意理解=號右邊的運算順序
未完待續 本文后續更新