找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1536|回复: 0
打印 上一主题 下一主题
收起左侧

C++ STL:vector容器基本命令与理解

[复制链接]
跳转到指定楼层
楼主
ID:821675 发表于 2020-9-21 21:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
## STL基本命令

## **1.vector是什么?**
vector是C++语言中的一种数组容器,用于顺序存放用户放入的数据,它与普通数组的区别在于,vector是可动态扩展的单端数组,当其容量不足以存放新的数据时,vector会自主的寻找更大的内存空间,并将原本数据与新加入数据拷贝到新空间中,同时释放原存储内存空间。

       
       
       

## **2. vector 容器的构造方式:**

2.1 vector<T> v; // 利用模板实现容器构造,调用默认的构造函数
2.2 vector(v.begin(),v.end());//将已有的容器中[v.begin(),v.end()]区间元素拷贝
2.3 vector(n,elem);//将n个elem元素给容器
2.4 vector(const vector &v)//拷贝构造函数
例子:

```cpp
void printVector(vector<int> &v)
{
        //遍历容器数据
        for (vector<int>::iterator pBegin = v.begin(); pBegin != v.end(); pBegin++)
        {
                cout << *pBegin << endl;

        }

}
void test01()
{
        vector<int> v1;//创建数组容器
        for (int i = 0; i < 10; i++)
        {
                v1.push_back(i); //数据存入
        }
        printVector(v1);
        vector<int> v2 = v1;  将容器1赋值给容器2
        printVector(v2);
        vector<int> v3(10, 100); 将10个100复制给容器
        printVector(v3);
        vector<int> v4(v3);   //容器的复制
        printVector(v4);  
}
```

## **3. vector容量和大小**

        vector<int> v;
        3.1 v.empty();//判断容器是否为空
        3.2 v.size();//获得当前容器元素个数,为容器的大小
        3.3 v.capacity();//获得容器当前容量,即在容器不重新寻找内存空间的基础上,容器所能存储的元素容量大小。
        3.4 v.resize(int num,elem);//重构容器大小,若容器变长则以elem填充新位置,若容器变短,则超出长度元素被删除,elem可省略。

## **4. vector插入和删除**

        4.1 v.push_back(elem);//在容器尾部插入元素elem,               
        4.2 v.pop_back();//删除容器尾部元素
        4.3 v.insert(const_iterator pos,num,ele);//在迭代器指向位置pos处,添加num个ele元素。
        4.4 v.erase(const_iterator start,const_iterator end);//删除容器中,[start,end]区间元素
        例子:**(关于出现vector incompatible 错误的发现与解决)**
       

```cpp
//在容器v中找到指向n处的迭代器函数
vector<int>::iterator  Getposition(int n,vector<int> &v)
{
        if (n > v.size())
        {
                cout << "超出查询范围" << endl;
        }
        vector<int>::iterator it = v.begin();
        for (int i = 0; i < n; i++)
        {
                it++;
        }
        return it;
}void test01()
{
        vector<int> v1;//创建数组容器
        for (int i = 0; i < 10; i++)
        {
                v1.push_back(i);
        }
        printVector(v1);   
        //报错代码
        /*
        vector<int>::iterator it1 = Getposition(5, v1);//将迭代器指向第5个元素位置
        v1.insert(it1, 1, 6); //在迭代器it指向位置处增加6
        ctor<int>::iterator it2 = Getposition(7, v1);
        v1.erase(it1,it2);删除第五个元素与第六个元素间的内容
        */
        vector<int>::iterator it1 = Getposition(5, v1);//将迭代器指向第5个元素位置
        v1.insert(it1, 1, 6); //在迭代器it指向位置处增加6
        vector<int>::iterator it2 = Getposition(5, v1);
        vector<int>::iterator it3 = Getposition(7, v1);
        v1.erase(it2,it3);删除第五个元素与第六个元素间的内容
}
```
在一开始运行报错代码时,出现了''vector iterator incompatible'' 的错误,在经过不断查找和代码摸索后发现,在向一个vector、string或deque插入元素会使指向容器的迭代器、引用和指针失效,由此造成报错。因此在执行完插入命令后,需要对迭代器进行更新。
        4.5 clear();//删除容器中元素

## **5. vector 数据存取**
5.1 v.at(i)& v [i]; //返回容器位置i处信息
5.2 v.front() & v.back();  //返回容器首尾信息
5.3 v.swap(v1); //容器v和v1 互换
实用:实现容器收缩内存:在对容器进行resize()操作缩小后,容量并未改变,此时利用自我互换可实现收缩内存的效果。
例:

```cpp
void test02()
{   
         vector<int> v;
         for (int i = 0; i < 100000; i++)
          {        
                          v.push_back(i);   
          }

    cout << "v的容量为:" << v.capacity() << endl;
    cout << "v的大小为:" << v.size() << endl;
        v.resize(3);
        cout << "v的容量为:" << v.capacity() << endl;   
        cout << "v的大小为:" << v.size() << endl;
        //收缩内存   
    vector<int>(v).swap(v); //匿名对象
    cout << "v的容量为:" << v.capacity() << endl;   
    cout << "v的大小为:" << v.size() << endl;
}

5.5 v.reserve(int len); //容器预留len个元素长度空间,目的是减少vector动态空间变化次数。

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表