string的基本使用

string的模擬實現

  • string的基本用法
    • string的遍歷(三種方式):
    • 關于auto(自動推導):
    • 范圍for:
  • 迭代器
    • 普通迭代器(可讀可改)
    • const迭代器(可讀不可改)
  • string細小知識點
  • string的常見接口
  • 引用計數和寫時拷貝(了解)
  • 編碼(了解)

string的基本用法

#include<iostream>
#include<string>//string要包含頭文件`#include<string>
using namespace std;int main()
{string st1;//無參string st2("1111");//帶參string st3(st2);//拷貝構造cout << st1 << endl;cout << st2 << endl;cout << st3 << endl;string st4(st2, 2);cout << st4 << endl;string st5("hello world", 3);cout << st5 << endl;string st6(10, 'x');cout << st6 << endl;string st7("hello world");//opterator[],可以讀和修改st7[0] = 'x';cout << st7 << endl;}

運行結果:
在這里插入圖片描述

string的遍歷(三種方式):

//1.下標+[]for (size_t i = 0; i < st7.size(); i++){cout << st7[i];}cout << endl;//2.迭代器(所有容器都可以用類似的方式)string::iterator it = st7.begin();while (it != st7.end()){cout << *it;it++;}cout << endl;//3.范圍for(),自動賦值,自動迭代,自動判斷結束for (auto ch:st7)//auto代表自動推導類型{cout << ch<<" ";}cout << endl;

關于auto(自動推導):

主要用途:替換長類型,簡化代碼,但一定程度上犧牲了代碼的可讀性。

在這里插入圖片描述
auto不能作為函數的參數,可以做返回值,但是建議謹慎使用。

// 不能做參數
void func2(auto a)
{}// 可以做返回值,但是建議謹慎使用
auto func3()
{return 3;
}

auto不能直接用來聲明數組。

// 編譯報錯:error C3318: “auto []”: 數組不能具有其中包含“auto”的元素類型auto array[] = { 4, 5, 6 };

范圍for:

適用于容器和數組的遍歷。

int main()
{int array[] = { 1, 2, 3, 4, 5 };// C++98的遍歷for (int i = 0; i < sizeof(array) / sizeof(array[0]); ++i){array[i] *= 2;}for (int i = 0; i < sizeof(array) / sizeof(array[0]); ++i){cout << array[i] << endl;}// C++11的遍歷for (auto& e : array)e *= 2;for (auto e : array)cout << e << " " << endl;string str("hello world");for (auto ch : str){cout << ch << " ";}cout << endl;return 0;
}

迭代器

普通迭代器(可讀可改)

1.正向迭代器

string s1("hello world");string::iterator it = s1.begin();while (it != s1.end()){cout << *it;it++;}cout << endl;

2.反向迭代器

string s1("hello world");
string::reverse_iterator rit = s1.rbegin();while (rit != s1.rend()){cout << *rit;rit++;}cout << endl;

const迭代器(可讀不可改)

1.const正向迭代器

const string s1("hello world");
string::reverse_iterator cit = s1.begin();while (cit != s1.end()){cout << *cit;cit++;}cout << endl;

2.const反向迭代器

const string s1("hello world");
string::const_reverse_iterator sit = s1.rbegin();while (sit != s1.rend()){cout << *sit;sit++;}cout << endl;

string細小知識點

開空間:reserve

string s1("hello world");s1.reserve(100);//提前開好空間,避免擴容    reserve  “保留”

求string的長度:size()(通用),length()(不具有通用性,C++向前兼容)

string s1("hello world");
cout << s1.size() << endl;

string的常見接口

void test()
{string s("hello world");s.push_back('x');//一次只能插入一個s += 'g';s += "hhh";//一般尾插用這個//頭插s.insert(0, "nihao");cout << s << endl;
}void test2()
{string s("hello world");s.erase(1, 1);//尾刪s.erase(s.size() - 1, 1);cout << s << endl;string s1("hello world");//替換s1.replace(5, 1,"%%");cout << s1 << endl;//替換所有的空格string s3("hello world");string tmp;for (auto ch : s3){if (ch == ' '){tmp += "%d%d";}else{tmp += ch;}}cout << tmp << endl;void test3()
{string s("test.cpp.zip");size_t pos = s.find('.');string s1 = s.substr(pos);cout << s1 << endl;size_t pos1 = s.rfind('.');string s2 = s.substr(pos1);cout << s2<< endl;
}void test4()
{string s("hello");string s1 = s + "world";cout <<s1<< endl;getline(cin, str);//遇到換行才會停止
}}
int main()
{test();return 0;
}

引用計數和寫時拷貝(了解)

寫時拷貝就是一種拖延癥,是在淺拷貝的基礎之上增加了引用計數的方式來實現的。
引用計數:用來記錄資源使用者的個數。在構造時,將資源的計數給成1,每增加一個對象使用該資源,就給計數增加1,當某個對象被銷毀時,先給該計數減1,然后再檢查是否需要釋放資源,如果計數為1,說明該對象時資源的最后一個使用者,將該資源釋放;否則就不能釋放,因為還有其他對象在使用該資源。

編碼(了解)

編碼:值和符號的映射關系
ASCII編碼表本質是:英文符號和值的映射關系
統一編碼:Unicode(萬國碼)
了解UTF-8,UTF-16,UTF-32;
GBK(國標):中國自己做了一套自己的編碼;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/78231.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/78231.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/78231.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

kubernetes》》k8s》》證書有效期

cd /etc/kubernetes/pki openssl x509 -in apiserver.crt -text -noount通常&#xff0c;Kubernetes的證書是由kubeadm生成的&#xff0c;所以可能需要修改kubeadm的源碼或者配置 登錄Master節點 》》》默認延續1年 # 查看證書 檢查證書有效期 # 該命令顯示 /etc/kubernetes…

LangChain LCEL表達式語言簡介

LangChain表達式語言&#xff08;LCEL&#xff09;是專為構建AI應用鏈設計的聲明式編程框架&#xff0c;通過管道符|實現組件無縫銜接&#xff0c;支持流式處理、異步調用等生產級特性。其核心優勢在于零代碼改動實現原型到生產的過渡&#xff0c;同時保持代碼簡潔性和可維護性…

【計算機視覺】CV實踐項目- 基于PaddleSeg的遙感建筑變化檢測全解析:從U-Net 3+原理到工程實踐

基于PaddleSeg的遙感建筑變化檢測全解析&#xff1a;從U-Net 3原理到工程實踐 技術背景與項目意義傳統方法的局限性深度學習的優勢 核心技術與算法原理U-Net 3架構創新全尺度跳躍連接深度監督機制 變化檢測技術路線 實戰指南&#xff1a;從環境搭建到模型部署環境配置數據準備與…

萬字長文 | Apache SeaTunnel 分離集群模式部署 K8s 集群實踐

文章作者&#xff1a;雷寶鑫 整理排版&#xff1a;白鯨開源 曾輝 Apache SeaTunnel官網鏈接: https://seatunnel.apache.org/ Apache SeaTunnel(以下簡稱SeaTunnel&#xff09;是一款新一代高性能、分布式的數據集成同步工具&#xff0c;正受到業界廣泛關注和應用。SeaTunnel支…

深入解析YOLO v1:實時目標檢測的開山之作

目錄 YOLO v1 算法詳解? ?1. 核心思想? ?2. 算法優勢? ?3. 網絡結構&#xff08;Unified Detection&#xff09;?? ?4. 關鍵創新? ?5. 結構示意圖&#xff08;Fig1&#xff09;? Confidence Score 的計算? 類別概率與 Bounding Box 的關系? 后處理&…

信令與流程分析

WebRTC是h5支持的重要特征之一&#xff0c;有了它&#xff0c;不再需要借助音視頻相關的客戶端&#xff0c;直接通過瀏覽器的Web頁面就可以實現音視頻聊天功能。 WebRTC項目是開源的&#xff0c;我們可以借助WebRTC&#xff0c;構建自己的音視頻聊緹娜功能。無論是前端JS的Web…

BIOS主板(非UEFI)安裝fedora42的方法

BIOS主板(非UEFI)安裝fedora42的方法 現實困難&#xff1a;將Fedora-Workstation-Live-42-1.1.x86_64.iso寫入U盤制作成可啟動U盤啟動fedora42&#xff0c;按照向導將fedora42安裝到真機的sda7分區中得到報錯如下內容&#xff1a; /boot/efi 必需的 /boot/efi必須位于格式化為e…

安卓 Compose 相對傳統 View 的優勢

安卓 Compose 相對傳統 View 的優勢 文章目錄 安卓 Compose 相對傳統 View 的優勢1. 引言2. 核心概念&#xff1a;Compose的革新性設計2.1 Jetpack Compose2.2 傳統安卓View系統 3. 開發體驗&#xff1a;Compose大幅提升效率3.1 使用Jetpack Compose構建UI3.2 使用傳統View系統…

SIEMENS PLC 程序 GRAPH 程序解讀 車型入庫

1、程序載圖1 2、程序截圖2 3、程序解釋 這是一個基于西門子 GRAPH 編程的車型 1 入庫順序控制流程圖&#xff0c;通過狀態機結構&#xff08;狀態框 S 與轉移條件 T&#xff09;描述完整工作流程&#xff0c;具體如下&#xff1a; 整體流程概述 初始化&#xff1a;從 S1&am…

VuePress可以做什么?

VuePress 可以做什么 VuePress 是一個基于 Vue.js 的靜態站點生成器,專注于文檔和內容展示。它結合了 Markdown 的簡潔性和 Vue 的靈活性,適合多種場景的開發需求。以下是 VuePress 的主要用途和功能: 1. 技術文檔網站 VuePress 最初是為編寫 Vue.js 官方文檔而設計的,因…

架構-系統可靠性分析與設計

一、可靠性相關基本概念 1. 可靠性與可用性 可靠性&#xff1a;軟件系統在遇到錯誤、意外操作或系統故障時&#xff0c;仍能維持自身功能特性的能力。 舉例&#xff1a;手機銀行APP在用戶誤操作&#xff08;如快速點擊多次轉賬&#xff09;時&#xff0c;仍能正確處理交易并避…

再談String

1、字符串常量池 1.1 創建對象的思考 下面是兩種創建字符串對象的代碼 public static void main1(String[] args) {String s1 "hello";String s2 "hello";System.out.println(s1 s2);//trueString s3 new String("hello");String s4 new …

《深入淺出ProtoBuf:從環境搭建到高效數據序列化》?

ProtoBuf詳解 1、初識ProtoBuf2、安裝ProtoBuf2.1、ProtoBuf在Windows下的安裝2.2、ProtoBuf在Linux下的安裝 3、快速上手——通訊錄V1.03.1、步驟1&#xff1a;創建.proto文件3.2、步驟2&#xff1a;編譯contacts.proto文件&#xff0c;生成C文件3.3、步驟3&#xff1a;序列化…

基于PHP+Uniapp的互聯網醫院源碼:電子處方功能落地方案

隨著“互聯網醫療”政策紅利持續釋放&#xff0c;互聯網醫院已成為推動醫療數字化轉型的重要方向。在這一趨勢下&#xff0c;電子處方功能模塊作為核心環節&#xff0c;不僅直接關系到線上問診閉環的實現&#xff0c;也成為系統開發中技術難度較高、業務邏輯最為復雜的一部分。…

ARM Cortex-M (STM32)如何調試HardFault

目錄 步驟 1: 實現一個有效的 HardFault 處理程序 步驟 2: 復現 HardFault 并使用調試器分析 步驟 3: 解讀故障信息 步驟 4: 定位并修復源代碼 HardFault 是 ARM Cortex-M 處理器中的一種異常。當處理器遇到無法處理的錯誤&#xff0c;或者配置為處理特定類型錯誤&#xff…

基于歸納共形預測的大型視覺-語言模型中預測集的**數據驅動校準**

摘要 本研究通過分離共形預測&#xff08;SCP&#xff09;框架&#xff0c;解決了大型視覺語言模型&#xff08;LVLMs&#xff09;在視覺問答&#xff08;VQA&#xff09;任務中幻覺緩解的關鍵挑戰。雖然LVLMs在多模態推理方面表現出色&#xff0c;但它們的輸出常常表現出具有…

LangChain4j 搭配 Kotlin:以協程、流式交互賦能語言模型開發

Kotlin 支持 | LangChain4j Kotlin 是一種面向 JVM&#xff08;及其他平臺&#xff09;的靜態類型語言&#xff0c;能夠實現簡潔優雅的代碼&#xff0c;并與 Java 庫無縫互操作。 LangChain4j 利用 Kotlin 擴展和類型安全構建器來增強 Java API&#xff0c;為其增添特定于 Ko…

正大模型視角下的市場結構判斷邏輯

正大模型視角下的市場結構判斷邏輯 在多數交易策略中&#xff0c;結構識別往往先于方向判斷。以正大的數據研判風格為例&#xff0c;其核心邏輯是&#xff1a;價格行為不能孤立解讀&#xff0c;必須結合時間與成交效率來判斷當前結構的有效性。 例如&#xff0c;一個上漲過程&…

Django 入門實戰:從環境搭建到構建你的第一個 Web 應用

Django 入門實戰&#xff1a;從環境搭建到構建你的第一個 Web 應用 恭喜你選擇 Django 作為你學習 Python Web 開發的起點&#xff01;Django 是一個強大、成熟且功能齊全的框架&#xff0c;非常適合構建中大型的 Web 應用程序。本篇將通過一個簡單的例子&#xff0c;帶你走完…

Unity 打包后 無陰影 陰影不顯示

在項目設置里面->質量 這里面顯示的是打包之后的質量 PS:注意運行質量 點擊左鍵選擇運行質量,這倆不一致就會導致,運行有陰影但是打包出來的平臺沒有陰影,原因就在這. 質量等級選擇好之后 往下滑,在這里打開陰影,如果距離過遠不顯示陰影,就增加陰影距離.