首頁 > 軟體

C++深入講解namespace與string關鍵字的使用

2022-05-21 13:01:29

namespace

首先宣告:在C++中支援三種域區域性域,名稱空間,類域。

1.為什麼使用namespace

在C++中可能會出現這樣的情況:我們正在編寫一個名為myj()函數的程式碼,但是另一個可用的庫,它也具有相同的myj()函數。現在編譯器無法知道程式碼中使用的myj()函數是哪個版本。

所以namespace就是用來克服這個困難,並被用作額外的資訊來區分類似的函數、類、變數等等,它們在不同的庫中具有相同的名稱。使用名稱空間,你可以定義定義名稱的上下文。

本質上,名稱空間定義了一個範圍。

2.namespace的定義

  • 名稱空間將全域性作用域分成不同的部分
  • 不同名稱空間中的識別符號可以同名而不會發生衝突
  • 名稱空間可以發生巢狀
  • 全域性作用域也叫預設名稱空間

舉例說明:

//1.普通的名稱空間
namespace myj
{
	int g _max = 10;
	int g_min = 0;
	int my_add(int a,int b){ return a+b;}
}
//2.名稱空間域可分層巢狀,同樣有分層遮蔽作用
namespace Primer
{
	double pi = 3.1415926535898;
	double my_add(double a,double b) {return a + b;}
	namespace Matrix
	{
		char my_max(char a,char b) { return a>b? a:b;}
	}
}
//3.同一個工程中允許存在多個相同名稱的名稱空間
//編譯器最後會合成同一個名稱空間中。
namespace myj
{
	float pi = 3.14;
	int my_sub(int a,int b)
	{
		my_min = a - b;
		return my_min;
	}
}

3.namespace的使用

  • 加名稱空間及作用域限定符
  • 使用using將名稱空間中成員引入
  • 使用using namespace名稱空間名稱引入
#include <stdio.h>
#include <iostream>
namespace First 
{
	int i = 0;
}
namespace Second
{
	int i = 1;
 
	namespace Internal //巢狀名稱空間
	{
		struct P  //巢狀名稱空間
		{
			int x;
			int y;
		};
	}
}
int main()
{
	using namespace First; //使用整個名稱空間
	using Second::Internal::P;  //使用巢狀的名稱空間
 
	printf("First::i = %dn", i);
	printf("Second::i = %dn", Second::i);  //使用名稱空間中的變數
	p = { 2, 3 };
	printf("p.x = %dn", p.x);
	printf("p.y = %dn", p.y);
	system("pause");
	return 0;
}

4.使用using指示符

標準C++庫中的所有元件都是在一個被稱為std的名稱空間中宣告和定義的。在採用標準C++的平臺上使用標準C++庫中的元件,只要寫一個using指示符:

using namespace std;

就可以直接使用標準C++庫中的所有成員。

string

1.string的定義及初始化

定義string的方式跟基本資料型別相同,只需要在string後跟上變數名

string s;

初始化:

string str = "yyds";

2.存取string的內容

  • 通過下標存取,s[i]表示字串s中下標位i的元素

如果要讀入和輸出整個字串,則只能使用cin和cout

如果一定要用printf來輸出string,可以用c_str()函數將string型別轉換為字元陣列進行輸出。

printf("%s",str.c_str());
  • 通過迭代器存取

因為string不像其他STL容器那樣需要引數,因此可以直接如下定義:

string::iterator it;

這樣就得到了迭代器it,並且可以通過*it來存取string裡的每一位

3.常用函數

1.operator+

連線兩個字串或者一個字串和一個字元。

2.compare operator

兩個string型別可以直接使用==、!=、<、<=、>、>=比較大小,比較規則是字典序。

3.length()/size()兩者返回string的長度,即存放的字元數。

4.insert(pos,string)

在pos號位置插入字串string

5.insert(it,it2,it3)

it為原字串的欲插入位置,it2和it3為待插字串的首位迭代器,用來表示串[it2,it3)將被插在it的位置上。

6.erase()

刪除單個元素,str.erase(it)用於刪除單個元素,it為需要刪除的元素的迭代器。 刪除一個區間內的所有元素。

7.clear()

用以清空string中的資料。

8.substr()

substr(pos,len)返回從pos號位開始、長度為len的字串。

9.string::npos

一個常數,其本身的值為-1,但由於是unsigned_int 型別,因此實際上也可以認為是unsigned_int型別的最大值4294967295。 string::npos用以作為find函數匹配時的返回值。

10.find()

str.find(str2),當str2是str的子串時,返回其在str中第一次出現的位置;如果str2不是str的子串,那麼返回string::npos。 str.find(str2,pos),從str的pos號位開始匹配str2,返回值與上相同。

11.replace()

str.replace(pos,len,str2)把str從pos號位開始、長度為len的子串替換為str2 str.replace(it1,it2,str2)把str的迭代器[it1,it2)範圍的字串替換為str2

12.assign()

str.assign(str.rbegin(),str.rend())可以實現字串翻轉。

到此這篇關於C++深入講解namespace與string關鍵字的使用的文章就介紹到這了,更多相關C++ namespace與string內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com