📅  最后修改于: 2023-12-03 15:35:35.099000             🧑  作者: Mango
当我们需要传递大量数据时,一般来说使用数组肯定是不可避免的。但是数组有它的局限性,比如在传递时需要事先指定长度,并且数组不具备自动扩容的能力。那么有没有更好的选择呢?
答案是肯定的,你可以使用vector
来代替数组,vector
不仅可以动态分配内存,而且还支持随机访问、插入、删除等操作,使用起来非常方便。
vector
是C++标准库中的一种容器,能够存放多个同类型数据,并且支持动态扩容,即在需要时会自动重新分配更大的内存以容纳更多的数据。vector
与数组不同之处在于,vector
可以根据需要扩大空间,而数组的空间大小在创建时就已经固定。
要使用vector
,首先需要包含头文件:
#include <vector>
创建一个存放整数的vector
:
std::vector<int> vec;
创建一个存放浮点数的vector
:
std::vector<float> vec;
向vector
添加元素可以使用push_back()
方法,该方法将元素添加到vector
的尾部:
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
现在vector
中已经有了三个元素,分别是1、2和3。
可以使用下标访问vector
中的元素,下标从0开始:
std::cout << vec[0] << std::endl; //输出1
std::cout << vec[1] << std::endl; //输出2
std::cout << vec[2] << std::endl; //输出3
当然也可以使用at()
方法:
std::cout << vec.at(0) << std::endl; //输出1
std::cout << vec.at(1) << std::endl; //输出2
std::cout << vec.at(2) << std::endl; //输出3
可以使用下标或at()
方法修改vector
中的元素:
vec[0] = 4;
vec.at(1) = 5;
现在vector
中的元素变成了4、5和3。
可以使用size()
方法获取vector
中元素的数量:
std::cout << vec.size() << std::endl; //输出3
可以使用for
循环或者for_each()
方法遍历vector
中的元素:
for (auto i : vec)
{
std::cout << i << " ";
}
std::cout << std::endl;
或者
std::for_each(vec.begin(), vec.end(),
[](int i) { std::cout << i << " "; });
std::cout << std::endl;
以上两种方法输出的结果都是4 5 3
。
vector
作为函数参数时,可以按值传递或者按引用传递。
按值传递:
void func(std::vector<int> vec) //形参是值,会拷贝vector
{
vec.push_back(4);
vec[0] = 5;
}
std::vector<int> vec{1, 2, 3};
func(vec);
std::cout << vec.size() << std::endl; //输出3,因为形参的vector与实参的vector是不同的
按引用传递:
void func(std::vector<int> &vec) //形参是引用,会修改原vector
{
vec.push_back(4);
vec[0] = 5;
}
std::vector<int> vec{1, 2, 3};
func(vec);
std::cout << vec.size() << std::endl; //输出4
总结:当函数需要修改vector
中的元素时,应该使用按引用传递的方式。
vector
是一个非常实用的容器,可以帮助程序员轻松地处理大量的数据。它具有动态分配内存、支持随机访问、插入和删除等操作等优点,并且使用非常简单方便。如果您还没有学会使用vector
,不妨现在就开始学习吧!