📜  vector übergeben c++ (1)

📅  最后修改于: 2023-12-03 15:35:35.099000             🧑  作者: Mango

程序员必知必会之:以vector传递参数

当我们需要传递大量数据时,一般来说使用数组肯定是不可避免的。但是数组有它的局限性,比如在传递时需要事先指定长度,并且数组不具备自动扩容的能力。那么有没有更好的选择呢?

答案是肯定的,你可以使用vector来代替数组,vector不仅可以动态分配内存,而且还支持随机访问、插入、删除等操作,使用起来非常方便。

1. vector是什么?

vector是C++标准库中的一种容器,能够存放多个同类型数据,并且支持动态扩容,即在需要时会自动重新分配更大的内存以容纳更多的数据。vector与数组不同之处在于,vector可以根据需要扩大空间,而数组的空间大小在创建时就已经固定。

2. 创建vector

要使用vector,首先需要包含头文件:

#include <vector>

创建一个存放整数的vector

std::vector<int> vec;

创建一个存放浮点数的vector

std::vector<float> vec;
3. 向vector添加元素

vector添加元素可以使用push_back()方法,该方法将元素添加到vector的尾部:

vec.push_back(1);
vec.push_back(2);
vec.push_back(3);

现在vector中已经有了三个元素,分别是1、2和3。

4. 从vector访问元素

可以使用下标访问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
5. 修改vector中的元素

可以使用下标或at()方法修改vector中的元素:

vec[0] = 4;
vec.at(1) = 5;

现在vector中的元素变成了4、5和3。

6. 获取vector的大小

可以使用size()方法获取vector中元素的数量:

std::cout << vec.size() << std::endl; //输出3
7. 遍历vector中的元素

可以使用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

8. 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; //输出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中的元素时,应该使用按引用传递的方式。

9. 总结

vector是一个非常实用的容器,可以帮助程序员轻松地处理大量的数据。它具有动态分配内存、支持随机访问、插入和删除等操作等优点,并且使用非常简单方便。如果您还没有学会使用vector,不妨现在就开始学习吧!