• Index

vector的简单使用

Reads: 10

std::vector内部的实现就是申请连续的堆内存,但是它不止是申请连续的堆内存,它还有更加强大的功能:根据你的需要自动改变连续堆内存的大小。更详细的原理将在后续教程中讲解,现在将简单介绍std::vector的使用。

std::vector属于容器库的内容,容器库里面所有的容器都可以保存各种数据,而这些在容器里面的数据也同样可以叫做元素

创建对象

要创建std::vector对象首先要指明它保存的元素的类型,如:std::vector<int> myvector;,通过<>指明vector要保存元素的类型是int类型。

基础示例

// 创建vector的简单例子
#include <iostream> // std::cout std::endl
#include <vector> // std::vector

int main (void)
{
    // vector的创建
    std::vector<int> first; // 没有元素的vector
    std::vector<int> second (4, 100); // vector里有4个int类型的100
    auto third = second; // 复制第二个vector
    auto fourth = std::move(second); // 转移第二个vector

    std::cout << "third和fourth里面的元素是否完全相同:";
    std::cout << std::boolalpha << (third == fourth) << std::endl;

    return 0;
}

输出结果:

third和fourth里面的元素是否完全相同:true

获取元素数量

成员函数size可以获取元素的数量。

// vector::size
#include <iostream> // std::cout std::endl
#include <vector> // std::vector

int main()
{
    std::vector<int> myints;
    std::cout << "0. size: " << myints.size() << '\n';

    for (int i = 0; i < 10; i++)
    {
        myints.push_back(i); // 在末尾添加元素
    }
    std::cout << "1. size: " << myints.size() << '\n';

    myints.pop_back(); // 删除最后一个元素
    std::cout << "2. size: " << myints.size() << '\n';

    return 0;
}

输出结果:

first是否为空:true
second是否为空:true
third是否为空:false

获取是否为空

成员函数empty可以获取是否没有元素,当返回true时代表对象内没有元素;反之返回false

// vector::empty
#include <iostream> // std::cout std::endl
#include <vector> // std::vctor

int main(void)
{
    // vector的创建
    std::vector<int> first; // 没有元素的vector
    std::vector<int> second(4, 100); // vector里有4个int类型的100
    auto third = std::move(second); // 转移第二个vector

    std::cout << std::boolalpha;
    std::cout << "first是否为空:" << first.empty() << std::endl;
    std::cout << "second是否为空:" << second.empty() << std::endl;
    std::cout << "third是否为空:" << third.empty() << std::endl;

    return 0;
}

输出结果:

first是否为空:true
second是否为空:true
third是否为空:false

对元素进行操作

使用操作符[]可以对元素进行访问和修改。

// vector::operator[]
#include <iostream> // std::cout std::endl
#include <vector> // std::vector

int main(void)
{
    std::vector<int> myvector(10); // 10个初始值为0的元素

    auto sz = myvector.size();
    for (std::size_t i = 0; i < sz; ++i)
    {
        myvector[i] = i;
    }

    // 使用[]操作符将元素反转
    for (std::size_t i = 0; i < sz / 2; i++)
    {
        auto temp = myvector[sz - 1 - i];
        myvector[sz - 1 - i] = myvector[i];
        myvector[i] = temp;
    }

    std::cout << "myvector的元素:";
    for (std::size_t i = 0; i < sz; i++)
    {
        std::cout << ' ' << myvector[i];
    }
    std::cout << std::endl;

    return 0;
}

输出结果:

myvector的元素: 9 8 7 6 5 4 3 2 1 0

操作第一个元素

成员函数front可以操作第一个元素:

// vector::front
#include <iostream>
#include <vector>

int main(void)
{
    std::vector<int> myvector;

    myvector.push_back(78);
    myvector.push_back(16);

    // 现在第一个元素等于78, 而最后一个元素等于16

    myvector.front() -= myvector.back();

    std::cout << "myvector.front()现在等于:" << myvector.front() << '\n';

    return 0;
}

输出结果:

myvector.front()现在等于:62

操作最后一个元素

成员函数back可以操作最后一个元素。

// vector::back
#include <iostream>
#include <vector>

int main(void)
{
    std::vector<int> myvector;

    myvector.push_back(10);

    while (myvector.back() != 0)
    {
        myvector.push_back(myvector.back() - 1);
    }

    std::cout << "myvector的元素:";
    for (std::size_t i = 0; i < myvector.size(); i++)
    {
        std::cout << ' ' << myvector[i];
    }
    std::cout << std::endl;

    return 0;
}

输出结果:

myvector的元素: 10 9 8 7 6 5 4 3 2 1 0

末尾插入元素

成员函数push_back可以将元素添加到末尾。

// vector::push_back
#include <iostream> // std::cout std::endl
#include <vector> // std::vector

int main (void)
{
    std::cout << "请输入一些整数(输入0结束):" << std::endl;

    int myint = 0;
    std::vector<int> myvector;
    do
    {
        std::cin >> myint;
        myvector.push_back(myint);
    } while (myint != 0);

    std::cout << "你输入的数字有:";
    for (auto i : myvector)
    {
        std::cout << i << ' ';
    }
    std::cout << std::endl;

    return 0;
}

删除末尾元素

成员函数pop_back可以将末尾元素删除。

// vector::pop_back
#include <iostream>
#include <vector>

int main(void)
{
    std::vector<int> myvector;
    int sum = 0;
    myvector.push_back(100);
    myvector.push_back(200);
    myvector.push_back(300);

    while (!myvector.empty())
    {
        sum += myvector.back();
        myvector.pop_back();
    }

    std::cout << "myvector中所有元素的总和是:" << sum << '\n';

    return 0;
}

输出结果:

myvector中所有元素的总和是:600

清空所有元素

// vector::clear
#include <iostream>
#include <vector>

int main(void)
{
    std::vector<int> myvector;
    myvector.push_back(100);
    myvector.push_back(200);
    myvector.push_back(300);

    std::cout << "myvector中的元素:";
    for (std::size_t i = 0; i < myvector.size(); i++)
    {
        std::cout << ' ' << myvector[i];
    }
    std::cout << std::endl;

    myvector.clear();
    myvector.push_back(1101);
    myvector.push_back(2202);

    std::cout << "myvector中的元素:";
    for (std::size_t i = 0; i < myvector.size(); i++)
    {
        std::cout << ' ' << myvector[i];
    }
    std::cout << std::endl;

    return 0;
}

输出结果:

myvector中的元素: 100 200 300
myvector中的元素: 1101 2202

Comments

Make a comment

  • Index

WARNING: You are using an old browser that does not support HTML5. Please choose a modern browser (Chrome / Microsoft Edge / Firefox / Sarafi) to get a good experience.