栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++标准模板库(STL)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++标准模板库(STL)

C++标准模板库(STL)上 vector Introduction

vector:长度根据需要而自动改变的数组。

定义:

vector name;
vector Arrayname[arraySize];

如果typename也是一个STL容器,定义时需要记得在>>符号之间加上空格。

如:vector name;

vector容器内元素的访问 通过下标访问

vector vi;

直接通过vi[index]访问。

通过迭代器访问

实例:

#include
#include
using namespace std;

int main(){
    vector vi;
    for (int i = 1; i <= 5;++i)
        vi.push_back(i);
    //vi.begin()为取vi的首元素地址,而it指向这个地址
    //vi.end()是尾元素地址的下一个地址
    vector::iterator it = vi.begin();
    //方式一:vi[i]与*(vi.begin()+i)等价
    for (int i = 0; i < 5;i++)
        cout << *(it + i);
    cout << endl;
    //方式二
    for (vector::iterator it = vi.begin(); it != vi.end();it++)
        cout << *it;
    return 0;
}

输出结果:12345

vector常用函数 push_back()

push_back(x)就是在vector后面添加一个元素x,时间复杂度O(n)。

#include
#include
using namespace std;

int main(){
    vector vi;
    for (int i = 1; i <= 3;++i)
        vi.push_back(i);//将1、2、3依次插入vi末尾
    for (int i = 0; i < vi.size();++i)//size()函数给出vi元素个数
        cout << vi[i]; 
    return 0;
}

输出结果:123

pop_back()

删除vector的尾元素,时间复杂度为O(1)。

#include
#include
using namespace std;

int main(){
    vector vi;
    for (int i = 1; i <= 3;++i)
        vi.push_back(i); //将1、2、3依次插入vi末尾
    vi.pop_back();      //删除vi的尾元素3
    for (int i = 0; i < vi.size();++i)//size()函数给出vi元素个数
        cout << vi[i]; 
    return 0;
}

输出结果:12

size()

用来获取vector中元素个数,时间复杂度O(1)。

#include
#include
using namespace std;

int main(){
    vector vi;
    for (int i = 1; i <= 3;++i)
        vi.push_back(i); //将1、2、3依次插入vi末尾
    cout << vi.size();
    return 0;
}

输出结果:3

clear()

清空vector中所有元素,时间复杂度O(N),其中N为vector中元素的个数。

#include
#include
using namespace std;

int main(){
    vector vi;
    for (int i = 1; i <= 3;++i)
        vi.push_back(i); //将1、2、3依次插入vi末尾
    vi.clear();
    cout << vi.size();
    return 0;
}

输出结果:0

insert()

insert(it,x)用来向vector的任意迭代器it处插入一个元素x,时间复杂度O(N)。

#include
#include
using namespace std;

int main(){
    vector vi;
    for (int i = 1; i <= 5;++i)
        vi.push_back(i); //将1、2、3、4、5依次插入vi末尾
    for (int i = 0; i < vi.size();++i)
        cout << vi[i];
    cout << endl;
    vi.insert(vi.begin() + 2, 0);//将0插入vi[2]的位置
    for (int i = 0; i < vi.size();++i)
        cout << vi[i];
    return 0;
}

输出结果:

12345
120345
erase() 删除单个元素

erase(it):删除迭代器为it处的元素。

#include
#include
using namespace std;

int main(){
    vector vi;
    for (int i = 1; i <= 5;++i)
        vi.push_back(i); //将1、2、3、4、5依次插入vi末尾
    for (int i = 0; i < vi.size();++i)
        cout << vi[i];
    cout << endl;
    vi.erase(vi.begin() + 3);//删除vi[3]即删除4
    for (int i = 0; i < vi.size();++i)
        cout << vi[i];
    return 0;
}

输出结果:

12345
1235
删除一个区间内所有元素

erase(first,last):删除[first,last)内所有元素。

#include
#include
using namespace std;

int main(){
    vector vi;
    for (int i = 1; i <= 5;++i)
        vi.push_back(i); //将1、2、3、4、5依次插入vi末尾
    for (int i = 0; i < vi.size();++i)
        cout << vi[i];
    cout << endl;
    vi.erase(vi.begin()+1,vi.begin()+4);//删除vi[1]、vi[2]、vi[3]
    for (int i = 0; i < vi.size();++i)
        cout << vi[i];
    return 0;
}

输出结果:

12345
15
set Introduction

set:集合,是一个内部自动有序且不含重复元素的容器。

定义:

set name;
set Arrayname[arraySize];
set容器内元素的访问

set只能通过迭代器iterator访问。

set::iterator it;

只有vector和string支持(it+i)的访问方式。*

实例:

#include
#include
using namespace std;

int main(){
    set st;
    st.insert(5);
    st.insert(2);
    st.insert(4);
    st.insert(1);
    st.insert(3);
    //set不支持it::iterator it = st.begin(); it != st.end();it++)
        cout << *it;
    return 0;
}

输出结果:12345

set常用函数 insert()

insert(x)将x插入set容器中,并自动递增排序和去重,时间复杂度O(logN),其中N为set内的元素个数。实例如上“set容器内元素的访问”。

find()

find(value)返回set中对应值为value的迭代器,时间复杂度O(logN),N为set中元素个数。

#include
#include
using namespace std;

int main(){
    set st;
    for (int i = 1; i <= 3;++i)
        st.insert(i);
    set::iterator it = st.find(2);//在set中查找2,返回其迭代器
    cout << *it;
    //也可以写成cout<<*(st.find(2));
    return 0;
}
size()

size()用来获得set内元素的个数,时间复杂度为O(1)。

#include
#include
using namespace std;

int main(){
    set st;
    st.insert(2);//插入2 5 4
    st.insert(5);
    st.insert(4);
    cout << st.size();
    return 0;
}

输出结果:3

clear()

clear()清空set中的所有元素,时间复杂度O(N),N为set内元素个数。

#include
#include
using namespace std;

int main(){
    set st;
    st.insert(2);//插入2 5 4
    st.insert(5);
    st.insert(4);
    st.clear();
    cout << st.size();
    return 0;
}

输出结果:0

erase() 删除单个元素

st.erase(it),it为所需要删除元素的迭代器。时间复杂度O(1),可以结合find()函数使用。

#include
#include
using namespace std;

int main(){
    set st;
    for (int i = 1; i <=5;++i)
        st.insert(i);
    st.erase(st.find(3));//利用find()函数找到3,然后用erase删除它
    for (set::iterator it = st.begin(); it != st.end();it++)
        cout << *it;
    return 0;
}

输出结果:1245

删除一个区间里所有元素

st.erase(first,last):删除一个区间里所有元素,其中first为所需要删除区间的其实迭代器,last为所需要删除区间的末尾迭代器的下一个地址,即删除[first,last)。时间复杂度O(last-first)。

#include
#include
using namespace std;

int main(){
    set st;
    for (int i = 1; i <=5;++i)
        st.insert(i);
    st.erase(st.find(3), st.end());//删除元素3到末尾之间的元素,即删除3~5。
    for (set::iterator it = st.begin(); it != st.end();it++)
        cout << *it;
    return 0;
}

输出结果:12

string Introduction

定义方式与基本数据类型相同,只需要在string后面跟上变量名。

string str;
string str="abcd";//给变量复制初始化
string中内容的访问 通过下表访问
#include
#include
using namespace std;

int main(){
    string str = "abcd";
    for (int i = 0; i < str.length();i++)
        cout << str[i];
    return 0;
}

输出结果:abcd

通过迭代器访问

string不像其他STL容器那样需要参数,可以直接定义:

string::iterator it;

实例:

#include
#include
using namespace std;

int main(){
    string str = "abcd";
    for (string::iterator it = str.begin(); it != str.end();it++)
        cout << *it;
    return 0;
}

输出结果:abcd

string常用函数 operator+=

string加法:可以将两个string直接拼接起来。

#include
#include
using namespace std;

int main(){
    string str1 = "abc", str2 = "xyz", str3;
    str3 = str1 + str2;//str1与str2拼接,赋值给str3
    str1 += str2;//将str2直接拼接到str1上
    cout << str1 << endl;
    cout << str2 << endl;
    cout << str3 << endl;
    return 0;
}

输出结果:

abcxyz
xyz
abcxyz
compare operator

两个string类型可以直接使用==,!=,<, <=, >, >=比较大小,比较规则是字典序。

#include
#include
using namespace std;

int main(){
    string str1 = "aa", str2 = "aaa", str3="abc",str4="xyz";
    if(str1=str3)
        cout << "str4>=str3" << endl;
    return 0;
}

输出结果:

str1=str3
length()和size()

leng()返回string的长度,即存放的字符数,时间复杂度O(1)。

string str="abc";
cout< 

输出结果:3 3

insert()
  • insert(pos,string):在pos号位置插入字符串string。

  • insert(it,it2,it3),it为原字符串欲插入位置,it2和it3为待插字符串的首位迭代器,用来表示串[it2,it3)将被插在it的位置上。

    #include
    #include
    using namespace std;
    
    int main(){
        string str = "abcxyz", str2 = "opq";//str是原字符串,str2是待插字符串
        //方式一:往str[3]处插入opq
        // str.insert(3, str2);
        //方式二:
        str.insert(str.begin() + 3, str2.begin(), str2.end());
        cout << str << endl;
        return 0;
    }
    

    输出结果:abcopqxyz

clear()

clear()清空string中的数据,时间复杂度O(1)。

#include
#include
using namespace std;

int main(){
    string str = "abcd";
    str.clear();
    cout << str.length();
    return 0;
}

输出结果:0

erase()

有删除单个元素、删除一个区间里所有元素两种方式。时间复杂度均为O(N)。

删除单个元素
#include
#include
using namespace std;

int main(){
    string str = "abcdefg";
    str.erase(str.begin() + 4);//删除4号位(e)
    cout << str;
    return 0;
}

输出结果:abcdfg

删除一个区间内所有元素
  • str.erase(first,last):删除[first,last).
#include
#include
using namespace std;

int main(){
    string str = "abcdefg";
    //删除在[str.begin()+2,str.end()]内的元素,即cdefg
    str.erase(str.begin() + 2, str.end());
    cout << str;
    return 0;
}

输出结果:ab

  • str.erase(pos,length),其中pos为需要开始删除的其实位置,length为删除的串长度。
#include
#include
using namespace std;

int main(){
    string str = "abcdefg";
    //删除从3号位开始的2个字符,即de
    str.erase(3, 2);
    cout << str;
    return 0;
}

输出结果:abcfg

substr()

substr(pos,len):返回从pos号位开始、长度为len的子串。时间复杂度O(len)。

#include
#include
using namespace std;

int main(){
    string str = "abcdefg";
    cout << str.substr(0,3);
    return 0;
}

输出结果:abc

string::npos

string::npos是一个常数,本身值为-1,npos用来表示不存在的位置。

#include
#include
using namespace std;

int main(){
    if(string::npos==-1)
        cout << "-1 is true"< 

输出结果:

-1 is true
18446744073709551615 is also true
find()

str.find(str2),当str2是str的子串时,返回其在str中第一次出现的位置;如果str2不是str的子串,那么返回string::pos。

str.find(str2,pos):从str的pos号位开始匹配str2,返回值与上相同。

时间复杂度O(mn),n,m分别为str和str2的长度。

#include
#include
using namespace std;

int main(){
    string str = "Thank you";
    string str2 = "you";
    string str3 = "like";
    cout << str.find(str2) << endl;
    cout << str.find(str3) << endl;
    return 0;
}

输出结果:

6
18446744073709551615
replace()

str.replace(pos,len,str2):把str从pos号位开始、长度为len的子串替换为str2。

str.replace(it1,it2,str2):把str的迭代器[it1,it2)范围的子串替换为str2。

时间复杂度O(str.length())

#include
#include
using namespace std;

int main(){
    string str = "Thank you for your love";
    string str2 = "her";
    string str3 = "enthusiasm";
    cout << str.replace(14, 4, str2) << endl;
    cout << str.replace(str.end()-4, str.end(), str3);
    return 0;
}

输出结果:

Thank you for her love
Thank you for her enthusiasm
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1025344.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号