是否在c++中返回一个vector
does returning a vector in c++ append?
我正在使用c++中的矢量,我提出了以下我不太理解的MWE:
#include <iostream>
#include <vector>
using namespace std;
vector<double> pb()
{
vector<double> a;
a.push_back(1);
a.push_back(2);
a.push_back(3);
return a;
}
int main()
{
vector<double> asd;
asd = pb();
cout << asd.size() << endl;
asd = pb();
cout << asd.size() << endl; //WHY DOES THIS GIVE 3, AND NOT 6? asd HAS NOT BEEN EMPTIED AT ANY POINT
return 0;
}
我不明白的是为什么每次我调用pb()
时,我的向量asd
都是"初始化"的。我所期望的是调用pb()
只会附加到asd
的内容。
在函数pb
中,您创建了一个新的向量,并将三个项目推入其中,然后返回它。然后将其复制到main
函数中的asb
并删除旧内容。
函数pb
如何知道它应该附加到向量上?它不是。你必须把它传递给函数。
void pb(std::vector<double>& a)
{
// Push back items...
}
int main()
{
std::vector<double> asd;
pb(asd);
// ...
}
如您所见,我将函数更改为而不是返回向量。而是作为引用参数传递。
不是每次都"初始化";它用函数调用的结果重新赋值,其中包含3个项。旧的内容在重新分配时被销毁。
如果要追加,请使用append
成员函数而不是重新赋值。或者,将引用传递给函数并附加到其上,而不是附加到新向量上。
长话短说,这应该会给你想要的答案:
vector<double> pb(vector<double> &a)
{
a.push_back(1);
a.push_back(2);
a.push_back(3);
}
int main()
{
vector<double> asd;
pb( asd );
cout << asd.size() << endl;
pb( asd );
cout << asd.size() << endl; //WHY DOES THIS GIVE 3, AND NOT 6? asd HAS NOT BEEN EMPTIED AT ANY POINT
return 0;
}
长故事:每次在原始版本的代码中调用pb()
时,都要创建一个新的 std::vector
,然后将其推送到新的vector
。在pb()
返回后,asd
被赋值给新创建的&填充vector
,而不是追加到。
相关文章:
- 在c++中用vector填充一个简单的动态数组
- 使用运算符 [] 引用 std::vector 上最后一个元素时出现问题<>
- 如何创建一个类,以便向量工作 std::vector<MyClass<int>> v{ 1,2,3 };
- 将向量之间的数字放在另一个向量之间<vector>>如果两个数字的差值为 1
- 创建一个没有复制构造函数的类的 std::vector 的 std::vector
- 访问 std:vector 的类成员 std:vector 在一个类中与另一个 std:vector
- 除了 std::vector 之外,是否有一个 std 容器不会复制和销毁作为类的元素?
- 从 std::vector 中选择一个元素,而不是给定元素
- 使用 glDrawElements 绘制一个 std::vector
- 为什么 vector 的方法调整大小会创建一个额外的对象?
- 当涉及到一个序列时,"vector[n].push_back()"总是O(1)吗?
- 创建一个 const std::vector ,其中包含另一个 const std::vector 和其他值
- 重新排序 vector<std::unique_ptr<X>>给定一个 vector<const X*>
- OpenCV,findContours - 为什么我们需要一个<vector<vector<Point>>来存储轮廓?为什么不直接<矢量<Point>&
- 在c++中,一个vector是否占用连续的内存槽?
- 在c++ 11中,这是将一个std::vector的内容移动到另一个vector的末尾的最有效的方法吗?
- 一个vector必须存储两个size吗?
- 一个vector/map中的函数变量参数
- 是否在c++中返回一个vector
- 将指定的vector内容复制到另一个vector