【算法笔记第6节 】STL

本文是关于C++ STL的笔记,涵盖了vector、set和string的基础使用。同时,文章讨论了在浮点数精度限制下如何判断两个数是否相等的问题,给出了输入输出规范及样例。
摘要由CSDN通过智能技术生成

6.1 vector

#include<stdio.h>
#include<vector>
using namespace std;
int main()
{

    vector<int> a;//一维数组
    vector< vector<int> > b;//二维数组

    for(int i=1; i<=5; i++)      /*在vector后面添加一个元素,O(1) */
        a.push_back(i);

    a.pop_back();                /*删除vector的尾元素,O(1) */
    a.size();                    /*获取vector中元素的个数,O(1) */
    a.clear();                   /*清空vector中的所有元素,O(n) */
    a.insert(a.begin(), -1);     /*将-1插入a[0]的位置,O(n)*/
    a.erase(a.begin());          /*删除a[0]处的元素*/

    for(int i=1; i<=5; i++)
        a.push_back(i);
    a.erase(a.begin()+1, a.begin()+3); /* 删除a[1], a[2]左闭右开 */

    vector<int>::iterator it = a.begin();
    for(it = a.begin(); it!=a.end();  it++)//左闭右开
        printf("%d ",*it);

    return 0;
}
/*
1 4 5
*/

6.2 set

#include<stdio.h>
#include<set>
using namespace std;

int main()
{
    /*
    set 内部自动有序且不含重复元素
    insert(); 插入且自动递增排序和去重
    find();   返回set中对应值value得迭代器

    */
    set<int> st;
    for(int i=1; i<=3; i++)
        st.insert(i);
    set<int>::iterator it = st.find(2);
    printf("%d\n",*it);
    
    st.erase(st.find(1)); //删除元素
    st.erase(2);//删除值为2的元素
    st.erase(st.begin(), st.end());//删除一个区间的元素
    
    return 0;
}

6.3 string

#include<stdio.h>
#include<string>
#include<iostream>
using namespace std;
int main()
{
    /*
    1. 通过下标访问,
       如果要读入和输出整个字符串,则只能用cin和cout.
       或者用c_str()将string类型转换为字符数组进行输出
    2. 通过迭代器访问.
    3. += 将两个string直接拼接起来。
    4. ==, !=, <, <=, >, >=比较大小, 比较规则是字典序.
    5. length()/size(), insert()
       insert(2, string),在str[2]号位置插入字符串string
       insert(2, s1.begin(), s1.end());
    6. erase(str.begin()+4);
       str.erase(str.begin()+2, str.end()-1);
       str.erase(3,2) 删除从3号位开始的2个字符
       substr(0, 5) 返回从str[0]开始,长度为len的子串
    7. string::npos == -1 或者 string::npos==4294967295
    8. str.find(str1); 返回str1在str中第一次出现的位置,若没有则返回string::npos
       str.find(str1, pos); 从str的pos号位开始匹配str1,返回值同上.
    9. getline(cin, s); 输入一行并赋值给s
    */
    string  str = "abcd";
    for(int i=0; i<str.length(); i++)
    {
        printf("%c", str[i]);//输出abcd
    }
    printf("%d\n", str.c_str());

    for(string::iterator it = str.begin(); it!=str.end(); it++)
    {
        printf("%c",*it);
    }

    if(string::npos==-1)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值