c++中string和vector的詳細(xì)介紹
知識(shí)點(diǎn)1【STL的概述】
STL(Standard Template Library,標(biāo)準(zhǔn)模板庫)
STL的三大組件:容器(container)、算法(algorithm)、迭代器(iterator)。
算法操作數(shù)據(jù),容器存儲(chǔ)數(shù)據(jù),迭代器是算法操作容器的橋梁,迭代器和容器一一對(duì)應(yīng)。
STL六大組件:
容器 算法 迭代器 仿函數(shù) 適配器 空間配置器
容器:存放數(shù)據(jù)
算法:操作數(shù)據(jù)
迭代器:容器和算法的橋梁
仿函數(shù):為算法提供更多的策略
適配器:為算法提供更多的參數(shù)接口
空間配置器:管理容器和算法的空間
算法的分類:
質(zhì)變算法:是指運(yùn)算過程中會(huì)改變區(qū)間元素的內(nèi)容。例如拷貝,替換,刪除等。
非質(zhì)變算法:是指運(yùn)算過程中不會(huì)區(qū)間的元素內(nèi)容,例如查找、計(jì)數(shù)、遍歷、尋找極值。
迭代器的分類:
知識(shí)點(diǎn)2【迭代器的案例】
案例:容器vector
#include <iostream> #include <vector> #include<algorithm> void myPrintInt(int num); using namespace std; void test01(){ //單端動(dòng)態(tài)數(shù)組vector類模板 vector<int> arr(0); //push_back()尾部插入數(shù)據(jù) arr.push_back(100); arr.push_back(200); arr.push_back(300); arr.push_back(400); //訪問數(shù)據(jù) //定義一個(gè)迭代器存儲(chǔ)arr的起始迭代器 vector<int>::iterator beginIt = arr.begin(); //定義一個(gè)迭代器存儲(chǔ)arr的結(jié)束迭代器 vector<int>::iterator endIt = arr.end(); //for循環(huán)遍歷1 for(vector<int>::iterator i = beginIt; i != endIt; i++){ //對(duì)迭代器取* 代表的是 容器的元素 //*biginIt cout << *i << " "; } cout << endl; //for循環(huán)遍歷2(推薦) for(vector<int>::iterator beginIt = arr.begin(); beginIt != arr.end();beginIt++){ cout << *beginIt << " "; } cout << endl; //STL提供的算法來遍歷容器(包含算法頭文件algorithm) //for_each從容器的起始--->結(jié)束,逐個(gè)元素取出 //myPrintInt容器數(shù)據(jù)的打印方式 for_each(arr.begin(),arr.end(),myPrintInt); } void myPrintInt(int num){ cout << num << " "; } int main(int argc, char *argv[]) { test01(); return 0; }
運(yùn)行結(jié)果:
案例2:容器存放自定義數(shù)據(jù)類型
#include <iostream> #include <vector> #include<algorithm> #include <string.h> using namespace std; class Person{ friend void myPrintInt1(Person &ob); private: string name; int age; public: Person(string name,int age){ this->name = name; this->age = age; } }; void myPrintInt1(Person &ob){ cout << ob.age << " " << ob.name << endl; } void test02(){ vector<Person> arr; Person p1("tom",15); arr.push_back(p1); arr.push_back(Person("davi",16)); arr.push_back(Person("mary",17)); arr.push_back(Person("peter",18)); for_each(arr.begin(),arr.end(),myPrintInt1); } int main(int argc, char *argv[]) { test02(); return 0; }
運(yùn)行結(jié)果:
案例3:容器嵌套容器
void test03(){ vector<int> v1; vector<int> v2; vector<int> v3; v1.push_back(10); v1.push_back(20); v1.push_back(30); v1.push_back(40); v2.push_back(100); v2.push_back(200); v2.push_back(300); v2.push_back(400); v3.push_back(1000); v3.push_back(2000); v3.push_back(3000); v3.push_back(4000); vector< vector<int>> v4; v4.push_back(v1); v4.push_back(v2); v4.push_back(v3); for(vector<vector<int>>::iterator it = v4.begin(); it != v4.end(); it++){ for(vector<int>::iterator mit = (*it).begin(); mit != (*it).end();mit++){ cout << (*mit) << " "; } cout << endl; } }
運(yùn)行結(jié)果:
知識(shí)點(diǎn)3【string類】
1、案例:string的構(gòu)造和賦值
#include <iostream> #include <string.h> using namespace std; /* 3.1.2.1 string 構(gòu)造函數(shù) string();//創(chuàng)建一個(gè)空的字符串 例如: string str; string(const string& str);//使用一個(gè) string 對(duì)象初始化另一個(gè) string 對(duì)象 string(const char* s);//使用字符串 s 初始化 string(int n, char c);//使用 n 個(gè)字符 c 初始化 3.1.2.2 string 基本賦值操作 string& operator=(const char* s);//char*類型字符串 賦值給當(dāng)前的字符串 string& operator=(const string &s);//把字符串 s 賦給當(dāng)前的字符串 string& operator=(char c);//字符賦值給當(dāng)前的字符串 string& assign(const char *s);//把字符串 s 賦給當(dāng)前的字符串 string& assign(const char *s, int n);//把字符串 s 的前 n 個(gè)字符賦給當(dāng)前的字符串 string& assign(const string &s);//把字符串 s 賦給當(dāng)前字符串 string& assign(int n, char c);//用 n 個(gè)字符 c 賦給當(dāng)前字符串 string& assign(const string &s, int start, int n);//將 s 從 start 開始 n 個(gè) 字符賦值給字符串 */ void test01(){ //string(const char* s);//使用字符串s初始化 string str1 = "hello"; cout << str1 << endl; //string(int n, char c);//使用n個(gè)字符c初始化 string str2(10,'H'); cout<<str2<<endl;//"HHHHHHHHHH" } int main(int argc, char *argv[]) { test01(); return 0; }
到此這篇關(guān)于c++中string和vector的詳細(xì)介紹的文章就介紹到這了,更多相關(guān)c++ string和vector內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++?opencv圖像處理實(shí)現(xiàn)灰度變換示例
這篇文章主要為大家介紹了C++?opencv圖像處理灰度變換的實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05C++中范圍(Ranges)與視圖(Views)的常見問題、易錯(cuò)點(diǎn)
ranges和views是C20引入的重要特性,它們讓代碼更加簡(jiǎn)潔、高效且富有表達(dá)力,通過理解其基本概念、注意常見的陷阱,并合理應(yīng)用高級(jí)技巧,開發(fā)者可以充分利用這些新特性,提升軟件質(zhì)量和開發(fā)效率,,本文將深入淺出地探討ranges與views的基礎(chǔ)概念、常見問題、易錯(cuò)點(diǎn)及避免策略2024-06-06C語言實(shí)現(xiàn)循環(huán)單鏈表的示例代碼
這篇文章主要給大家詳細(xì)介紹了C語言如何實(shí)現(xiàn)循環(huán)單鏈表,文章通過代碼示例講解的非常詳細(xì),對(duì)我們的學(xué)習(xí)或工作有一定的參考價(jià)值,感興趣的小伙伴跟著小編一起來看看吧2023-08-08記錄一個(gè)C++在條件查詢時(shí)遇到的問題(推薦)
這篇文章主要介紹了記錄一個(gè)C++在條件查詢時(shí)遇到的問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01