1. 程式人生 > >使用string,include和using必須配套使用?

使用string,include和using必須配套使用?

首先我們必須得引入名稱空間。也就是#include一下名稱空間所在的地方。
然後我們才能使用
using namespace宣告使用裡面的所有的方法。如果不新增就會報錯

也就是說如果namespace aaa在aaa.h檔案裡面,如果我們沒有#include"aaa.h"就使用using namespace aaa;
那麼就會出現異常。

所以使用 string我們需要使用 #include<string>和using std::string;

string重要的是    構造方法賦值構造拷貝構造過載的運算子輸入輸出。這幾個都是對應幫助文件的地址,可以自行去檢視實現。

輸入直到檔案末尾的幾種方式。 

while(cin<<ss)
while(getline(is,s))

cin和getline都是返回一個輸入檔案流物件。如果是檔案末尾就返回0

提一句:empty和size不同,empty判斷字串長度。size判斷字串佔用的空間。底層的資料結構是一個vector動態陣列。
所以也可以通過resize方法來調整字串的大小。

typedef basic_string<char, char_traits<char>, allocator<char> > string;

 string裡面一些內建的類型別名。

	typedef basic_string<_Elem, _Traits, _Alloc> _Myt;
	typedef _String_alloc<_String_base_types<_Elem, _Alloc> > _Mybase;
	typedef _Traits traits_type;
	typedef _Alloc allocator_type;

	typedef typename _Mybase::_Alty _Alty;

	typedef typename _Mybase::value_type value_type;
	typedef typename _Mybase::size_type size_type;
	typedef typename _Mybase::difference_type difference_type;
	typedef typename _Mybase::pointer pointer;
	typedef typename _Mybase::const_pointer const_pointer;
	typedef typename _Mybase::reference reference;
	typedef typename _Mybase::const_reference const_reference;

	typedef typename _Mybase::iterator iterator;
	typedef typename _Mybase::const_iterator const_iterator;

我們經常用到的size_type一般來說是int型別,我們可以通過

  typedef typename string::size_type stdr;
  std::cout << typeid(stdr).name() << std::endl;

我們可以通過這種方式獲取這個型別。得到的結果是一個無符號整型。
我們也可以通過decltype或者是auto欄位來進行獲取這個欄位的型別。

最好是按照  string::size_type 或者 auto來進行獲取值。

拼接字元

我們可以通過下面的方式進行構造,也是很常用的構造。

string str0 = "str";
string str1 = str0 + "str";
string str2 = "str" + "str"; 

解析一下上面的。

1 隱式轉換->拷貝構造
2 過載運算子->拷貝構造
3 錯誤

 

 

 

 

 

 

 


我們可以看見,第二個例子之所以能夠執行是因為我們過載了+運算子,返回了一個string物件,然後執行拷貝構造方法。
第三個為什麼是錯的呢,是因為字面值型別是沒有過載運算子的,而且不能新增。因為基本型別是不能進行

 

ctype.h裡面的方法進行判斷字元型別。可以自定義,可以用內建庫。

for迭代

可以通過for進行迭代,也可以通過for進行修改,不過一般使用引用,減少記憶體的消耗。

string str = "aaaaa";
for(auto &c : str){
    std::cout<<cstd::endl;
}

可以新增引用,也可以不新增引用。這個就是我們記憶體佔用的問題。