通过引用传递矢量
Passing vector by reference
本文关键字:引用 更新时间:2023-10-16
使用普通的C数组,我会做这样的事情:
void do_something(int el, int **arr)
{
*arr[0] = el;
// do something else
}
现在,我想用矢量代替标准阵列,并在这里获得相同的结果:
void do_something(int el, std::vector<int> **arr)
{
*arr.push_front(el); // this is what the function above does
}
但它显示"表达式必须具有类类型"。如何正确地做到这一点?
您可以通过引用传递容器,以便在函数中对其进行修改。其他答案没有解决的是std::vector
没有push_front
成员函数。您可以使用vector
上的insert()
成员函数进行O(n(插入:
void do_something(int el, std::vector<int> &arr){
arr.insert(arr.begin(), el);
}
或者使用std::deque
代替摊销O(1(插入:
void do_something(int el, std::deque<int> &arr){
arr.push_front(el);
}
如果您将函数定义为接受std::vector<int>& arr
和整数值的参数,那么您可以在该函数中使用push_back
:
void do_something(int el, std::vector<int>& arr)
{
arr.push_back(el);
//....
}
用法:
std::vector<int> arr;
do_something(1, arr);
void do_something(int el, std::vector<int> **arr)
应该是
void do_something(int el, std::vector<int>& arr)
{
arr.push_back(el);
}
通过引用被简化为在C++中使用&
。
您可以通过引用传递向量,如下所示:
void do_something(int el, std::vector<int> &arr){
arr.push_back(el);
}
但是,请注意,此函数总是在向量的后面添加一个新元素,而数组函数实际上会修改第一个元素(或初始化其值(。
为了达到完全相同的结果,你应该写:
void do_something(int el, std::vector<int> &arr){
if (arr.size() == 0) { // can't modify value of non-existent element
arr.push_back(el);
} else {
arr[0] = el;
}
}
通过这种方式,您可以添加第一个元素(如果向量为空(或修改其值(如果第一个元素已经存在(。
您不需要使用**arr,您可以使用:
void do_something(int el, std::vector<int> *arr){
arr->push_back(el);
}
或:
void do_something(int el, std::vector<int> &arr){
arr.push_back(el);
}
**arr没有任何意义,但如果你坚持使用它,可以这样做:
void do_something(int el, std::vector<int> **arr){
(*arr)->push_back(el);
}
但同样没有理由这么做…
相关文章:
- 将对象数组的引用传递给函数
- 什么时候在C++中返回常量引用是个好主意
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 何时在引用或唯一指针上使用移动语义
- 如何在c++中使用引用实现类似python的行为
- 编译C++时未定义的引用
- Ctypes wstring通过引用传递
- c++r值引用应用于函数指针
- 理解c++中的引用
- C++取消引用指针.为什么会发生变化
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 强制转换为引用类型
- 引用一个已擦除类型(void*)的指针
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么
- 具有默认值的引用获取函数
- 如何使用基类指针引用派生类成员
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 如何引用基类的派生类?