容器vector&黑马程序员C++

发布时间:2024年01月22日

输出:

#include <iostream>
#include <vector>
using namespace std;

void printVector (auto & v)
{
    for (const int i : v)
        cout << i << " ";
    cout << endl;
}

1、构造赋值
// 构造
void test1 ()
{
    // 默认构造, 无参数构造
    vector <int> v1;
    for (int i = 0; i < 5; i++)
        v1.push_back (i);

    printVector (v1);

    // 区间构造
    vector<int>v2(v1.begin (), v1.end ());
    printVector (v2);

    // n 个elem 方式
    vector<int>v3 (10, 100); // 前面是个数,后面是数值
    printVector (v3);

    // 拷贝构造
    vector <int>v4 (v3);
    printVector (v4);
}

// 赋值
void test2 ()
{
    vector <int> v1;
    for (int i = 0; i < 5; i++)
        v1.push_back (i);

    vector<int> v2 = v1;
    printVector (v2);

    // assign
    vector<int> v3;
    v3.assign (v1.begin (), v1.end ());
    printVector (v3);

    // n个elem方式赋值
    vector<int> v4;
    v4.assign (10, 2);
    printVector (v4);
}
2、容量和大小

// 容量
void test3 ()
{
    vector <int> v1;
    for (int i = 0; i < 5; i++)
        v1.push_back (i);

    // empty ()
    if (v1.empty ())
        cout << "empty" << endl;
    else
        cout << "no empty" << "容量:" << v1.capacity() << endl << "size :" << v1.size() << endl;

    // 重新指点大小
    v1.resize (15); // 默认用0填充
    printVector (v1);
    // 或者
    v1.resize (19, 2); // 选择填充
    printVector (v1);

    // 重新定义范围比原来小
    v1.resize (3);
    printVector (v1);

}

3、插入、删除
// 插入、删除
void test4 ()
{
    vector <int> v1;
    for (int i = 0; i < 5; i++)
        v1.push_back (i);  // 尾插

    // 尾删
    v1.pop_back ();
    printVector (v1);

    // 头插 第一个参数是迭代器
    // (迭代器, 个数, 插入数值)
    v1.insert (v1.begin (), 2, 1000);
    printVector (v1);

    // 删除
    v1.erase (v1.begin ()); // 不写明位置删除一个
    printVector (v1);
    v1.erase (v1.begin(), next (v1.begin (), 3)); // 也可以这么写
    // v1.erase (v1.begin (), v1.end ()); // 全删
    printVector (v1);

}
4、数据存取、互换容器、预留空间
// 数据存取
void test5 ()
{
    vector <int> v1;
    for (int i = 0; i < 5; i++)
        v1.push_back (i);  // 尾插


    // 输出其中任意元素
    for (int i = 0; i < 5; i++)
    {
        cout << v1[i] << " ";
    }
    cout << endl;

    for (int i = 0; i < 5; i++)
        cout << v1.at(i) << " ";
    cout << endl;

    // 输出具体数值,使用的时候注意与begin和end分开
    cout << "first: " << v1.front () << endl;
    // 返回第一个元素
    cout << "last: " << v1.back () << endl;
    // 返回最后一个元素
}

// 互换容器
void test6 ()
{
    vector <int> v1;
    for (int i = 0; i < 5; i++)
        v1.push_back (i);  // 尾插

    vector <int> v2;
    for (int i = 9; i >= 0; i--)
        v2.push_back (i);

    // 交换
    v1.swap (v2);
    printVector (v1);
    printVector (v2);
}

// 预留空间
void test7 ()
{
    // 检测多少次开辟空间
    vector <int> v1;
    int num = 0;
    int * p = NULL;
    for (int i = 0; i < 100000; i++)
    {
        v1.push_back (i);  // 尾插

        if (p != &v1[0])
        {
            p = &v1[0];
            num++;
        }
    }

    cout << num << endl;

    // reserve 预留空间
    num = 0;
    vector<int>v2;
    v2.reserve (100000);
    for (int i = 0; i < 100000; i++)
    {
        if (p != &v2[0])
        {
            p = &v2[0];
            num++;
        }
    }
    cout << num << endl;

}

文章来源:https://blog.csdn.net/2301_76327397/article/details/135701480
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。