網站首頁 編程語言 正文
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 = %d\n", i);
printf("Second::i = %d\n", Second::i); //使用命名空間中的變量
p = { 2, 3 };
printf("p.x = %d\n", p.x);
printf("p.y = %d\n", 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())可以實現字符串翻轉。
原文鏈接:https://blog.csdn.net/weixin_56935264/article/details/124891749
相關推薦
- 2023-03-16 Android?OpenCV基礎API清晰度亮度識別檢測_Android
- 2022-06-21 C++分析講解類的靜態成員變量是什么_C 語言
- 2022-07-02 C語言由淺入深理解指針_C 語言
- 2022-05-06 C#利用反射實現多數據庫訪問_C#教程
- 2022-03-03 CSS樣式修改不換行顯示省略號及多行顯示省略號
- 2022-10-19 Pandas中Series的創建及數據類型轉換_python
- 2022-04-12 【debug】TypeError: mel() takes 0 positional argumen
- 2022-05-07 LINQ教程之LINQ操作語法_實用技巧
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支