Loading

STL学习注意点

STL六大组件:容器、算法、迭代器、仿函数、适配器(配接器)、空间配置器

其中,容器:各种数据结构,如vector、list、deque、set、map等,用来存放数据;容器又分为序列式容器和关联式容器。

算法:各种常用的算法,如sort、find、copy、for_each等;算法又分为质变算法和非质变算法。

迭代器:扮演了容器与算法之间的胶合剂;迭代器分为输入迭代器、输出迭代器、前向迭代器、双向迭代器以及随机访问迭代器等。

仿函数:行为类似函数,可作为算法的某种策略。

适配器:一种用来修饰容器或者仿函数或迭代器接口的东西。

空间配置器:负责空间的配置与管理。

 

我们在使用STL中string容器进行查找时需要注意到find()和rfind()的使用特点,find()是从左往右进行查找,而rfind()是从右往左查找。

string str111 = "abcdefbc";
int pos1 = str111.find("bc");
cout<<"pos1= "<<pos1<<endl;

pos1 = str111.rfind("bc");
cout<<"pos1= "<<pos1<<endl;

结果:

 

关于vector容器中的知识点:

需要注意的是vector容器的容量和大小不是一个概念,同时当我们使用resize()重新指定容器大小时,,若是指定为更小的大小时,容量不会立即发生变化,指定为更大的大小时,容量会立即发生变化。

vector<int> v1;
for (int  i = 0; i < 10; i++)
{
    v1.push_back(i);
}
vector<int> v31;
v31 = v1;
if (v31.empty())
{
     cout<<"v31为空!!"<<endl;
}else
{
     cout<<"v31不为空!!"<<endl;
     cout<<"v31的容量为:"<<v31.capacity()<<endl;
     cout<<"v31的大小为:"<<v31.size()<<endl;
}

v31.resize(15,10);
printVector(v31);
cout<<"v31的容量为:"<<v31.capacity()<<endl;
cout<<"v31的大小为:"<<v31.size()<<endl;

v31.resize(5);
printVector(v31);
cout<<"v31的容量为:"<<v31.capacity()<<endl;
cout<<"v31的大小为:"<<v31.size()<<endl;
void printVector(vector<int> &v)
{
    for (vector<int>::iterator it = v.begin(); it!= v.end(); it++)
    {
        cout<<*it<<" ";
    }
    cout<<endl;
    
}

  结果:

 

 

 reserve(int len)函数可以根据指定特定空间大小,防止后面需要多次分配空间,如果数据量较大,可以一开始利用reserve预留空间

vector<int> v ;
//v.reserve(1000);
int num =0; int * p =NULL; for (int i = 0; i < 1000; i++) { v.push_back(i); if (p!=&v[0]) { p=&v[0]; num++; } } cout<<"num= "<<num<<endl;

 

 加入v.reserve(1000)后

 

posted @ 2023-03-12 15:48  肆伍陸  阅读(28)  评论(0)    收藏  举报