C++STL详解之vector

在C++中,vector是标准库提供的一个非常有用的容器类。它是一个动态数组,可以根据需要动态调整大小。它提供了方便的方法来管理和访问动态数组的元素。

目录

一、调用

二、使用

1、.size()函数

2、插入函数

Ⅰ、.push_back()

Ⅱ、.insert()

3、vector的遍历以及输出

Ⅰ、下标遍历

Ⅱ、迭代器遍历

①正向遍历

②反向遍历

4、删除函数

Ⅰ、erase()

Ⅱ、pop_back()

三、总结


一、调用

使用vector时,你需要包含头文件< vector >。然后你可以使用vector模板类来创建一个vector对象,指定其中存储的元素类型。

例如,你可以创建一个vector对象来存储整数:

​
​
#include<vector>
#include<iostream>
using namespace std;
int main()
    vector<int> v;
}

​

​

定义一个空vector,其值为int类型。vector<>的里面可以套int、char、string,包括用struct定义的类型(没听过struct请忽略)甚至vector自己。

二、使用

1、.size()函数

vector的size()函数是用来返回vector容器中元素的个数的。它的语法为:

size_type size() const;

其中,size_type是vector容器中元素个数的数据类型。

示例用法:

#include <iostream>
#include <vector>
using namespace std;
int main() {
    vector<int> v={1,2,3,4,5};
    cout<<"大小为"<<v.size()<<endl;
	return 0;
}

上述示例中,通过size()函数获取到了vector容器中元素的个数,并将结果输出到屏幕上。

输出为:

2、插入函数

Ⅰ、.push_back()

vector的.push_back函数是用来在vector的末尾添加一个元素的。它的语法为:

void push_back(const T& value);

其中,T是vector存储的元素类型,value是要添加的元素。

该函数会将value的副本添加到vector的末尾。如果vector的容量已满,则会自动进行内存扩展。

示例用法:

#include<vector>
#include<iostream>
using namespace std;
int main() {
    vector<int> v;
    v.push_back(1); // 添加元素1
    v.push_back(2); // 添加元素2
    v.push_back(3); // 添加元素3
    return 0;
}

在上述示例中,通过.push_back函数分别添加了元素1、2、3到v中。最终,v的元素是[1, 2, 3]。

Ⅱ、.insert()

C++的vector类提供了insert函数用于在指定位置插入元素。insert函数的语法如下所示:

iterator insert (iterator position, const value_type& val);

其中,position是一个迭代器,指向了插入位置之前的元素。val是要插入的元素的值。

下面是一个示例代码,演示了如何使用insert函数向vector插入元素:

容器值为:1 6 2 3 4 5

在上面的示例中,我们创建了一个包含1到5的vector。然后,我们使用insert函数在第二个位置插入了元素6。可以看到,插入函数将元素6正确地插入到了vector中。

3、vector的遍历以及输出

Ⅰ、下标遍历

可以使用下标运算符 [] 来遍历 C++ 的 vector。示例代码如下:

#include<iostream>
#include<vector>
using namespace std;
int main(){
	vector<int> v;
    v.push_back(10); // 添加元素10
    v.push_back(20); // 添加元素20
    v.push_back(30); // 添加元素30
   	int x=v.size();//x存放着v的长度
	for(int i=0;i<x;i++){
		cout<<v[i]<<" ";
	}
	return 0;
}

这段代码创建了一个 vector 对象 v,并使用整型数字初始化。然后使用 for 循环和下标运算符 [] 遍历 v 的每个元素,并打印到屏幕上。

输出:

需要注意的是,使用下标遍历 vector 时要确保下标不越界,最好使用 size() 函数获取 vector 的大小来作为循环的终止条件。

Ⅱ、迭代器遍历

C++STL(Standard Template Library)提供了一组迭代器(iterators),用于遍历容器中的元素。迭代器提供了一种统一的访问容器中元素的方式,无论容器是顺序容器(如vector、list)、关联容器(如map、set)还是容器适配器(如stack、queue)。

迭代器分为输入迭代器(Input Iterator)、输出迭代器(Output Iterator)、正向迭代器(Forward Iterator)、双向迭代器(Bidirectional Iterator)和随机访问迭代器(Random Access Iterator)等五种类型,它们的功能和能力从弱到强逐渐增强。

使用迭代器可以通过以下步骤进行遍历容器中的元素:

  1. 获取容器的起始迭代器和终止迭代器,可以使用begin()和end()成员函数或者全局函数begin()和end()来获取。

  2. 使用迭代器变量从起始迭代器开始遍历到终止迭代器的前一个位置。迭代器可以使用自增运算符(++)来递增,获取当前元素可以使用解引用运算符(*)

①正向遍历

下面是一个使用迭代器正向遍历vector容器的示例代码:

#include <iostream>
#include <vector>
using namespace std;
int main() {
   	vector<int> v = {1, 2, 3, 4, 5};
	vector<int>::iterator it;//定义一个迭代器,名称为it
    // 使用迭代器遍历容器
    for (it=v.begin();it<v.end();it++) {
        cout<< *it <<" ";
    }
    return 0;
}

在上述示例代码中,使用v.begin()获取vector的起始迭代器,使用v.end()获取vector的终止迭代器。然后通过for循环遍历容器中的元素,使用*it获取当前元素的值,并输出到标准输出流。

输出:

②反向遍历

代码:

#include <iostream>
#include <vector>
using namespace std;
int main() {
   	vector<int> v = {1, 2, 3, 4, 5};
	vector<int>::reverse_iterator rit;//定义一个反向迭代器,名称为rit
    // 使用反向迭代器遍历容器
    for (rit=v.rbegin();rit<v.rend();rit++) {
        cout<< *rit <<" ";
    }
    return 0;
}

4、删除函数

Ⅰ、erase()

C++中,可以使用vector的erase()函数来删除指定位置的元素。erase()函数有两种使用方式:

  1. 删除单个元素:
vector_name.erase(iterator_position);

其中,vector_name是要删除元素的vector名称,iterator_position是一个迭代器,指向要删除的元素的位置。

  1. 删除一段元素:
vector_name.erase(iterator_start, iterator_end);

其中,vector_name是要删除元素的vector名称,iterator_start是一个迭代器,指向要删除的起始位置,iterator_end是一个迭代器,指向要删除的结束位置的下一个位置。

下面是一个示例代码,演示如何使用erase()函数删除vector中的元素:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> numbers = {1, 2, 3, 4, 5};

    // 删除第三个元素
    numbers.erase(numbers.begin() + 2);

    // 删除第二个到第四个元素
    numbers.erase(numbers.begin() + 1, numbers.begin() + 4);

    // 输出剩余的元素
    for (int number : numbers) {
        std::cout << number << " ";
    }
    std::cout << std::endl;

    return 0;
}

输出结果为:

1 5

在上面的示例代码中,我们首先创建了一个包含5个整数的vector。然后,使用erase()函数删除了第三个元素(值为3)和第二个到第四个元素(值为2、4)。最后,使用循环遍历剩余的元素,并将它们输出到控制台上。

Ⅱ、pop_back()

C++的vector类中的pop_back()函数用于移除vector中最后一个元素。

该函数没有参数,也没有返回值。

用法示例:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> nums = {1, 2, 3, 4, 5};

    nums.pop_back(); // 移除最后一个元素

    for (int num : nums) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

输出结果:

1 2 3 4

在示例中,我们定义了一个包含5个整数的vector nums。然后,我们使用pop_back()函数移除了最后一个元素,即数字5。最后,我们遍历了vector中的元素并输出结果,结果为1 2 3 4,最后一个元素已被移除。

三、总结

有很多好处:

  1. 简洁高效:使用向量可以将多个数据压缩成一个对象,节省内存空间。同时,向量操作使用矩阵运算,可以利用硬件加速,提高计算效率。

  2. 方便的索引和切片:向量中的元素可以通过索引和切片进行访问和操作。这样可以快速定位和操作需要的数据,提高效率。

  3. 多种数据结构支持:向量可以存储多种类型的数据,如数字、字符串、对象等。这样可以方便地处理不同类型的数据,并且可以进行数据类型转换。

  4. 简化代码:向量操作可以极大地简化代码。通过使用向量化操作,可以避免使用循环和条件语句,使代码更加清晰、简洁。

  5. 并行计算支持:向量操作可以方便地进行并行计算。现代计算机都支持向量指令集(如SIMD),可以同时对多个数据进行计算,提高计算效率。

  6. 扩展性强:向量操作可以灵活地处理不同规模的数据。无论是处理小规模的数据还是大规模的数据,向量操作都能满足需求,并且可以方便地进行扩展。

总之,向量操作可以简化代码、提高计算效率,并且具有较好的扩展性和灵活性。这使得向量成为处理数据的重要工具,在很多领域都有广泛的应用。

你学废了吗?

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值