以前知识点与容器的联系

以前知识点与容器的联系

这里不介绍具体用法,只是满足个人的需求对容器的探索。

1 循环与容器

如果循环里定义了个数据结构vector,对它进行t次循环,每次都会重新初始化。如:

for(int i=0;i<3;++i)
{
    vector<int> a(100);
    cout<<a.size()<<' '<<a[0]<<endl;
    a.erase(a.begin()+2,a.begin()+20);
    a[0]=1;
    cout<<a.size()<<' '<<a[0]<<endl;
}

输出结果为

100 0
82 1
100 0
82 1
100 0
82 1

如果没有初始化,则每次循环结束后都会将vector清空,如:

for(int i=0;i<3;++i)
{
    vector<int> a;
    if(i>=1) cout<<a[0];
    a.push_back(1);
    cout<<a[0]<<endl;
}

输出中途程序停止工作。
经过测试,对于list,queue,stack,set,map都有以上性质一样。(用调试看)

2 全局变量和局部变量与容器

容器和其他变量一样遵循全局变量与局部变量的规则。

3 容器相关函数的返回值

3.1 count函数的返回值
对于关联容器,函数的返回值为元素k出现的个数。
3.2 erase函数的返回值

  • a.erase(begin)或a.erase(begin,end)
    如果进行单个元素删除,对于vector,list,set,map,erase,string函数返回值为删除元素所在位置的迭代器,就结果而言,返回一个指向删除元素下一个元素的迭代器。
    如果区间删除,erase返回值为删除区间左端点元素所在位置的迭代器。就结果而言,返回一个指向 删除区间右端点元素 的 下一个元素 的迭代器。
    请注意,如果迭代器超出容器范围,有可能会运行时出错。
  • a.erase(k)
    对于map和set,这个函数返回值为是否删除了元素,也就是,如果元素k存在,那么删除k返回1,如果不存在,那么返回0.(个人测试结果)
  • string类的earse
    上面介绍了使用迭代器的,而对于string本身,还有两种删除方法:
s1.erase(1, 3); //删除下标1开始长度为3的子串 
s1.erase(5);  //删除下标5开始之后所有的字符

返回值都是字符串自身的引用
3.3 find函数的返回值

  • 对于关联容器map和set,find函数返回值为查找元素(map是键值)所在位置的迭代器,如果没有,则返回一个指向容器末尾的迭代器(相当于返回a.end())。
  • 对于string,find的返回值都是子串或字符在 string 对象字符串中的位置(即下标)。如果查不到,则返回 string::npos。string: :npos 是在 string 类中定义的一个静态常量,它是unsigned int的最大值,强制转化为int后就是-1。(string下的find有很多种类,它们都遵循这些)
posted @ 2020-12-06 22:37  七铭的魔法师  阅读(37)  评论(0编辑  收藏  举报