STL-常用容器之vector容器

一、vector基本概念

功能:
        --vector数据结构和 数组非常相似 ,也称为 单端数组
vector 与普通数组区别:
        --不同之处在于数组是静态空间,而vector 可以 动态扩展
动态扩展:
        --并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间

        --vector容器的迭代器是支持随机访问的迭代器  

 二、vector构造函数

功能描述:
        --创建vector 容器
函数原型:
vector<T> v;                              //采用模板实现类实现,默认构造函数
vector(v.begin(), v.end());          //将v[begin(), end()) 区间中的元素拷贝给本身。
vector(n, elem);                         //构造函数将n个 elem 拷贝给本身。
vector(const vector &vec);         // 拷贝构造函数。

 示例 :

#include <vector>
void printVector(vector<int>& v) {    
    for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
        cout << *it << " ";
    }
    cout << endl;
}
void test01()
{
    vector<int> v1; //无参构造
    for (int i = 0; i < 10; i++)
    {
        v1.push_back(i);
    }
    printVector(v1);
    vector<int> v2(v1.begin(), v1.end());
    printVector(v2);
    vector<int> v3(10, 100);
    printVector(v3);
    vector<int> v4(v3);
    printVector(v4);
}
int main() {
    test01();
    system("pause");
    return 0;
}
总结: vector 的多种构造方式没有可比性,灵活使用即可

三、vector赋值操作  

功能描述:
        --给vector 容器进行赋值
函数原型:
vector& operator=(const vector &vec);         // 重载等号操作符
assign(beg, end);                                         //将[beg, end)区间中的数据拷贝赋值给本身。
assign(n, elem);                                           //将n个elem拷贝赋值给本身
#include <vector>
void printVector(vector<int>& v) {
    for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
        cout << *it << " ";
    }
    cout << endl;
}
//赋值操作
void test01()
{
    vector<int> v1; //无参构造
    for (int i = 0; i < 10; i++)
    {
        v1.push_back(i);
    }
    printVector(v1);
    vector<int>v2;
    v2 = v1;
    printVector(v2);
    vector<int>v3;
    v3.assign(v1.begin(), v1.end());
    printVector(v3);
    vector<int>v4;
    v4.assign(10, 100);
    printVector(v4);
}
int main() {
    test01();
    system("pause");
return 0;
}

 总结 vector赋值方式比较简单,使用operator=,或者assign都可以

四、vector容量和大小 

功能描述:
        --对vector 容器的容量和大小操作
函数原型:
empty();                       //判断容器是否为空
capacity();                   //容器的容量
size();                          //返回容器中元素的个数
resize(int num);           // 重新指定容器的长度为 num ,若容器变长,则以默认值填充新位置。
                                   //如果容器变短,则末尾超出容器长度的元素被删除。
resize(int num, elem) ; // 重新指定容器的长度为 num ,若容器变长,则以 elem 值填充新位置。
                                   //如果容器变短,则末尾超出容器长度的元素被删除
#include <vector>
void printVector(vector<int>& v) {
    for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
        cout << *it << " ";
    }
    cout << endl;
}
void test01()
{
    vector<int> v1;
    for (int i = 0; i < 10; i++)
    {
        v1.push_back(i);
    }
    printVector(v1);
    if (v1.empty())
    {
        cout << "v1为空" << endl;
    }
    else
    {
        cout << "v1不为空" << endl;
        cout << "v1的容量 = " << v1.capacity() << endl;
        cout << "v1的大小 = " << v1.size() << endl;
    }
    //resize 重新指定大小 ,若指定的更大,默认用0填充新位置,可以利用重载版本替换默认填充
    v1.resize(15,10);
    printVector(v1);
    //resize 重新指定大小 ,若指定的更小,超出部分元素被删除
    v1.resize(5);
    printVector(v1);
    }
int main() {
    test01();
    system("pause");
return 0;
}
总结:
        --判断是否为空 --- empty
        --返回元素个数 --- size
        --返回容器容量 --- capacity
        --重新指定大小 --- resize

 

五、vector插入和删除

功能描述:
        --对vector 容器进行插入、删除操作
函数原型:
push_back(ele);                                                //尾部插入元素ele
pop_back();                                                       //删除最后一个元素
insert(const_iterator pos, ele);                          //迭代器指向位置pos插入元素 ele
insert(const_iterator pos, int count,ele);           // 迭代器指向位置 pos 插入 count 个元素 ele
erase(const_iterator pos);                                //删除迭代器指向的元素
erase(const_iterator start, const_iterator end) ; // 删除迭代器从 start end 之间的元素
clear();                                                              //删除容器中所有元素

示例:

#include <vector>
void printVector(vector<int>& v) {
    for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
        cout << *it << " ";
    }
    cout << endl;
}
//插入和删除
void test01()
{
    vector<int> v1;
    //尾插
    v1.push_back(10);
    v1.push_back(20);
    v1.push_back(30);
    v1.push_back(40);
    v1.push_back(50);
    printVector(v1);
    //尾删
    v1.pop_back();
    printVector(v1);
    //插入
    v1.insert(v1.begin(), 100);
    printVector(v1);
    v1.insert(v1.begin(), 2, 1000);
    printVector(v1);
    //删除
    v1.erase(v1.begin());
    printVector(v1);
    //清空
    v1.erase(v1.begin(), v1.end());
    v1.clear();
    printVector(v1);
}
int main() {
    test01();
    system("pause");
    return 0;
}

 总结:

        --尾插 --- push_back
        --尾删 --- pop_back
        --插入 --- insert ( 位置迭代器 )
        --删除 --- erase (位置迭代器)
        --清空 --- clear

六、vector数据存取 

功能描述:
        --对vector 中的数据的存取操作
函数原型:
at(int idx) ;          //返回索引 idx 所指的数据
operator[];         // 返回索引 idx 所指的数据
front();              // 返回容器中第一个数据元素
back();             // 返回容器中最后一个数据元素

示例:

#include <vector>
void test01()
{
    vector<int>v1;
    for (int i = 0; i < 10; i++)
    {
        v1.push_back(i);
    }
    for (int i = 0; i < v1.size(); i++)
    {
        cout << v1[i] << " ";
    }
    cout << endl;
    for (int i = 0; i < v1.size(); i++)
    {
        cout << v1.at(i) << " ";
    }
    cout << endl;
    cout << "v1的第一个元素为: " << v1.front() << endl;
    cout << "v1的最后一个元素为: " << v1.back() << endl;
}
int main() {
    test01();
    system("pause");
return 0;
}
总结:
        --除了用迭代器获取vector 容器中元素, [ ] at 也可以
        --front返回容器第一个元素
        --back返回容器最后一个元素

七、vector互换容器  

功能描述:
        --实现两个容器内元素进行互换
函数原型:
swap(vec) ; // vec 与本身的元素互换

示例:  

#include <vector>
void printVector(vector<int>& v) {
    for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
        cout << *it << " ";
    }
    cout << endl;
}
void test01()
{
    vector<int>v1;
    for (int i = 0; i < 10; i++)
    {
        v1.push_back(i);
    }
    printVector(v1);
    vector<int>v2;
    for (int i = 10; i > 0; i--)
    {
        v2.push_back(i);
    }
    printVector(v2);
    //互换容器
    cout << "互换后" << endl;
    v1.swap(v2);
    printVector(v1);
    printVector(v2);
}
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;
}
int main() {
    test01();
    test02();
    system("pause");
return 0;
}

 总结:swap可以使两个容器互换,可以达到实用的收缩内存效果

八、vector预留空间

功能描述:
        --减少vector 在动态扩展容量时的扩展次数
函数原型:
reserve(int len) ; // 容器预留 len 个元素长度,预留位置不初始化,元素不可访问。

示例:

#include <vector>
void test01()
{
    vector<int> v;
    //预留空间
    v.reserve(100000);
    int num = 0;
    int* p = NULL;
    for (int i = 0; i < 100000; i++) {
        v.push_back(i);
        if (p != &v[0]) {
            p = &v[0];
            num++;
        }
    }
    cout << "num:" << num << endl;
}
int main() {
    test01();
    system("pause");
return 0;
}

 总结:如果数据量较大,可以一开始利用reserve预留空间

  • 9
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
vector是C++标准库中的一个动态数组容器,提供了一种方便的方式来存储和操作一系列的元素。vector可以自动调整大小,可以在尾部快速插入和删除元素,并且支持随机访问。 以下是vector的一些重要特点和用法: 1. 定义和初始化vector: 可以使用以下方式定义和初始化一个vector: ```cpp std::vector<int> vec; // 定义一个空的vector std::vector<int> vec1(5); // 定义一个包含5个默认初始化元素的vector std::vector<int> vec2(5, 10); // 定义一个包含5个值为10的元素的vector std::vector<int> vec3 = {1, 2, 3, 4, 5}; // 使用初始化列表初始化vector ``` 2. 访问和修改元素: 可以使用下标运算符[]或at()函数来访问和修改vector中的元素。例如: ```cpp std::vector<int> vec = {1, 2, 3, 4, 5}; int firstElement = vec; // 访问第一个元素 int secondElement = vec.at(1); // 访问第二个元素 vec = 10; // 修改第三个元素的值为10 ``` 3. 插入和删除元素: 可以使用push_back()函数在vector的尾部插入一个元素,使用pop_back()函数删除尾部的元素。也可以使用insert()函数在指定位置插入元素,使用erase()函数删除指定位置的元素。例如: ```cpp std::vector<int> vec = {1, 2, 3}; vec.push_back(4); // 在尾部插入元素4 vec.pop_back(); // 删除尾部的元素 vec.insert(vec.begin() + 1, 10); // 在第二个位置插入元素10 vec.erase(vec.begin() + 2); // 删除第三个位置的元素 ``` 4. 获取vector的大小和容量: 可以使用size()函数获取vector中元素的个数,使用capacity()函数获取vector的容量(即当前分配的内存空间大小)。例如: ```cpp std::vector<int> vec = {1, 2, 3, 4, 5}; int size = vec.size(); // 获取元素个数,结果为5 int capacity = vec.capacity(); // 获取容量,结果可能大于等于5 ``` 5. 遍历vector: 可以使用迭代器或范围for循环来遍历vector中的元素。例如: ```cpp std::vector<int> vec = {1, 2, 3, 4, 5}; for (auto it = vec.begin(); it != vec.end(); ++it) { std::cout << *it << " "; } // 或者使用范围for循环 for (int num : vec) { std::cout << num << " "; } ``` 这些只是vector的一些基本用法,还有很多其他的函数和特性可以探索和使用。你可以参考C++标准库的文档或其他相关资料来深入了解vector的更多用法和细节。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万叶学编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值