C++STL整理

C++ STL中最基本以及最常用的類或容器
string、vector、set、list、map

string

處理string中的字符

for(int i=0;i<s3.size();i++)
{
cout<<s3[i]<<endl;
s3[i]='s';
}

迭代器iterator,訪問容器元素
iter
返回迭代器iter所指元素的引用
iter->mem
解引用iter并獲取該元素的名問men的成員,等價于(
item).mem
++iter
令iter指示容器中的下一個元素
--iter
令iter指示容器中的上一個元素
iter1==iter2;iter1!=iter2
判斷兩個迭代器是否相等(不相等),如果兩個迭代器指示的是同一個元素或者它們是同一個容器的尾后迭代器,則相等;反之,不相等

string str("hi sysu");
for (string::iterator it = str.begin(); it != str.end(); it++)
{
    cout << *it << endl;
}

string 別的函數(shù)

string sq("heoolo sdaa ss");
cout << s.find("aa", 0) << endl; //返回的是子串位置。第二個參數(shù)是查找的起始位置,如果找不到,就返回string::npos
if (s.find("aa1", 0) == string::npos)
{
    cout << "找不到該子串!" << endl;
}

vector

如果vector的元素類型是int,默認(rèn)初始化為0;如果vector的元素類型為string,則默認(rèn)初始化為空字符串。

使用push_back加入元素,并且這個元素是被加在數(shù)組尾部。

for (int i = 0; i < 20; i++)
{
    v1.push_back(i);
}

vector其他的操作
v.empty()
v.size()
v.push_back(t)
v[n],返回v中第n個位置上的元素的引用
v1={a,b,c...}

訪問和操作vector中的每個元素

for (int i = 0; i < v1.size(); i++)
{
    cout << v1[i] << endl;
    v1[i] = 100;
    cout << v1[i] << endl;
}

只能對已存在的元素進(jìn)行賦值或者修改操作,如果要是新加入元素,務(wù)必使用push_back.push_back的作用,告訴編譯器為新元素開辟空間。將新元素存入新空間里。

使用迭代器來訪問元素

vector<string> v6 = { "hi","my","name","is","lee" };
for (vector<string>::iterator iter = v6.begin(); iter != v6.end(); iter++)
{
    cout << *iter << endl;
    //下面兩種方法都行
    cout << (*iter).empty() << endl;
    cout << iter->empty() << endl; 
}

List

list就是鏈表,在C語言中我們想使用鏈表都是自己去實現(xiàn)的,實現(xiàn)起來倒不難,但是如果有現(xiàn)成的高效的鏈表可以使用的話,我們就不需要重復(fù)造輪子了。STL就提供了list容器給我們。
list是一個雙向鏈表,而單鏈表對應(yīng)的容器則是foward_list。
list即雙向鏈表的優(yōu)點是插入和刪除元素都比較快捷,缺點是不能隨機訪問元素。
初始化方式就大同小異了,跟vector基本一樣。要想用list先加個頭文件list。

#include <list>

#include <iostream>
#include <list>
#include <string>

using namespace std;

template <typename T>
void showlist(list<T> v)
{
    for (list<T>::iterator it = v.begin(); it != v.end(); it++)
    {
        cout << *it;
    }
    cout << endl;
}

int main()
{
    list<int> l1{ 1,2,3,4,5,5,6,7,7 };
    showlist(l1);
    list<double> l2;
    list<char> l3(10);
    list<int> l4(5, 10); //將元素都初始化為10
    showlist(l4);

    
    system("pause");
    return 0;
} 

map

map運用了哈希表地址映射的思想,也就是key-value的思想,來實現(xiàn)的。

首先給出map最好用也最最常用的用法例子,就是用字符串作為key去查詢操作對應(yīng)的value。

要使用map得先加個頭文件map。

#include <map>
#include <iostream>
#include <map>
#include <string>

using namespace std;

void showmap(map<string, int> v)
{
    for (map<string, int>::iterator it = v.begin(); it != v.end(); it++)
    {
        cout << it->first << "  " << it->second << endl;  //注意用法,不是用*it來訪問了。first表示的是key,second存的是value
    }
    cout << endl;
}

int main()
{
    map<string, int> m1; //<>里的第一個參數(shù)表示key的類型,第二個參數(shù)表示value的類型
    m1["Kobe"] = 100;
    m1["James"] = 99;
    m1["Curry"] = 98;

    string s("Jordan");
    m1[s] = 90;

    cout << m1["Kobe"] << endl;
    cout << m1["Jordan"] << endl;
    cout << m1["Durant"] << endl; //不存在這個key,就顯示0

    m1.erase("Curry");//通過關(guān)鍵字來刪除
    showmap(m1);
    m1.insert(pair<string, int>("Harris", 89)); //也可以通過insert函數(shù)來實現(xiàn)增加元素
    showmap(m1);
    m1.clear(); //清空全部

    system("pause");
    return 0;
}

[圖片上傳中...(image-fb90d6-1554208576435-0)]

如果想看看某個存不存在某個key,可以用count來判斷

if (m1.count("Lee"))
{
    cout << "Lee is in m1!" << endl;
}
else
{
    cout << "Lee do not exist!" << endl;
}

用迭代器來訪問元素

for (map<string, int>::iterator it = m1.begin(); it != m1.end(); it++)
{
    cout << it->first<<"  "<<it->second << endl;  //注意用法,不是用*it來訪問了。first表示的是key,second存的是value
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容