C++标准模板库STL运用(1)

参考胡凡《算法笔记》P191-208

主要是vector set string的内容

是在code::block 17.12上跑的

#include <iostream>
#include <stdio.h>

#include <vector>
#include <set>
#include <string>

using namespace std;

int main()
{
    //  VECTOR    向量 变长数组
    /*{

    //vector <int> vim[100];
    //iterator
    //vector<typename>::iterator it
        *it

    vector <int> vi;
    for (int i = 1; i <= 9; i++)
       {
           vi.push_back(i);
       }

    vi.pop_back();
    vector<int>::iterator it =vi.begin();
    for (int i = 0; i < 5; i++)
       {
           printf("%d",*(it + i));
           printf("%d",vi[i]);
           printf("%d",*(vi.begin() + i));
           //the three methods are equal
       }

    for (vector<int>::iterator it = vi.begin();it != vi.end();it++){
        printf("%d",*it);
    }

    printf("\n%d\n",vi.size());
    vi.insert(vi.begin()+2,-1);
    for (vector<int>::iterator it = vi.begin();it != vi.end();it++){
        printf("%d",*it);
    }
    printf("\n");
    vi.erase(vi.begin()+5);
    for (vector<int>::iterator it = vi.begin();it != vi.end();it++){
        printf("%d",*it);
    }
    vi.erase(vi.begin()+2,vi.begin()+4);
    printf("\n");
    for (vector<int>::iterator it = vi.begin();it != vi.end();it++){
        printf("%d",*it);
    }
    vi.clear();
    printf("\n%d\n",vi.size());

    以上,可以发现vector完全可以完成数组的诸多功能,且方便。
    目前我知道
    1、vi.begin()好用,就可以看作是vi[0]。vi.end()作为迭代器结尾标识。
    2、push_back()
       pop_back()
       size()
       clear()
       insert(it,x)
       erase()
       erase(first,last)
        erase(vi.begin(),vi.end()) == vi.clear();


    Q1:每个括号内可以有什么内容?
    Q2:迭代器为什么叫这个名字?和指针的异同?
    Q3: 怎样用向量实现多维数组?
    }*/

    //  SET       集合 内部自动有序且不含重复元素的容器
    /*{
    //set <int> a[100];
    //only accessed by iterator

    set <int> st;
    //st.insert (1);
    st.insert (2);
    st.insert (3);st.insert (3);
    st.insert (4);
    st.insert (6);  //非顺序
    st.insert (5);
    st.insert (7);

    for(set<int>::iterator it = st.begin(); it != st.end();it++){
         printf("%d ",*it);
    }

    printf("\n");
    set<int>::iterator it = st.find(2);
    printf("%d ",*it);

    printf("\n");
    st.erase(st.find(5));
    for(set<int>::iterator it = st.begin(); it != st.end();it++){
         printf("%d ",*it);
    }

    st.erase(7);
    printf("\n");
    for(set<int>::iterator it = st.begin(); it != st.end();it++){
         printf("%d ",*it);
    }

    printf("\n");
    st.erase(st.find(4),st.end());
    for(set<int>::iterator it = st.begin(); it != st.end();it++){
         printf("%d ",*it);
    }

    printf("\n");
    printf("%d\n",st.size());

    st.clear();
    printf("%d\n",st.size());


    //至此,了解了set主要是用于去重和按升序排序。每个元素是惟一的

    //Q1: st.find()返回的是什么?
    //Q2:set录入元素岂不是很麻烦?
    }*/

    //  STRING
    /*{

//    string str = "abcd";
//    for (int i = 0; i < 4; i++)
//    {
//        printf("%c".str[i]);
//    }
    //printf("%s\n",str.c_str());


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

//    string str1 = "abc";
//    string str2 = "xyz";
//    string str3;
//
//    str3 = str1 + str2;
//    str1 += str2;
//    cout<<str1<<endl;
//    cout<<str3<<endl;
//    printf("\n");
//
//    printf("%d %d\n",str1.length(),str1.size());

    //Q1 :string 和string.h 区别何在?以及 using namespace std 是不是仅仅为了调用stl?
    //Q2 :在c++中用include<stdio.h>?
    //Q3 :str.length和str.size区别
    //Q4 :cout<<**<<endl;为什么要这样定义

//    string str = "abcxyz",str2 = "123456";
//    //str.insert(2,str2);//str2写opd也行
//    // cout<<str<<endl;
//    str.insert(str.begin() + 3,str2.begin()+2,str2.end()-1);
//    cout<<str<<endl;
//
//    str.erase(str.begin()+4);
//    cout<<str<<endl;
//    str.erase(3,2);
//    cout<<str<<endl;
//    str.erase(str.begin()+2,str.end()-1);
//    cout<<str<<endl;
//    str.clear();

    //至此知道了string的容器用法,总的来说和前两个有相似之处,这或许就是stl的好处吧。
    // string::npos 是一个常数。-1 或者说是4294967295(表示无符号整数的十进制最大值。如果是16进制,那么是0xFFFFFFFF。也可以解释为一个IP地址(V4) 255.255.255.255 )
    }*/
    cout << "\nHello world!" << endl;
    return 0;
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值