C++函数可以利用vector容器实现函数返回多个值
#include <iostream>
#include <vector>
using namespace std;
// C++函数可以利用vector容器实现函数返回多个值
// 返回一个vector变量,并打印vec的地址和存放在容器中第一个数据的首地址
vector<float> fun(int * x, int * y)
{
vector<float> vec;
// 创建一个用于储存结果的vector
int temp;
temp = *x; /* 保存地址 x 的值 */
*x = *y; /* 把 y 赋值给 x */
*y = temp; /* 把 x 赋值给 y */
int sum1 =*x + *y;
int minus1 =*x - *y;
int product1 =*x * *y;
float quotient1 = (float)*x / *y;
vec.push_back(*x); // 添加一个元素 *x
vec.push_back(*y); // 添加一个元素 *y
vec.push_back(sum1); // 添加一个元素
vec.push_back(minus1); // 添加一个元素
vec.push_back(product1); // 添加一个元素
vec.push_back(quotient1); // 添加一个元素
cout << "fun():&vec " << &vec << endl;
cout << "fun():&vec[0] " << &vec[0] << endl;
// cout << "After swap, a is " << vec[0] << endl;
// cout << "After swap, b is " << vec[1] << endl;
// cout << "sum is " << vec[2] << endl;
// cout << "minus is " << vec[3] << endl;
// cout << "product is " << vec[4] << endl;
// cout << "quotient is " << vec[5] << endl;
return vec; // 返回vector
}
int main()
{
vector<float> vec;
// 创建一个接收用结果的vector(名称vec任意)
// 局部变量声明
int a = 100;
auto b = 205; // auto可以自动根据右值判断左值的类型
cout << "------------Before-------------" <<endl;
cout << "Before swap, a is " << a << endl;
cout << "Before swap, b is " << b << endl;vec = fun(&a,&b); // 接收传来的参数
cout << "------------After-------------" <<endl;
cout << "After swap, a is " << a << endl; // ☆☆利用指针(的引用)带回
cout << "After swap, a is " << vec[0] << endl; // ☆☆利用返回值带回
cout << "After swap, b is " << b << endl;
cout << "After swap, b is " << vec[1] << endl;
cout << "sum is " << vec[2] << endl;
cout << "minus is " << vec[3] << endl;
cout << "product is " << vec[4] << endl;
cout << "quotient is " << vec[5] << endl;
cout << "main():&vec " << &vec << endl;
cout << "main():&vec[0] " << &vec[0] << endl;
vector<float>().swap(vec); // vec便是需要清空的容器。
return 0;
}
//————————————————
// 本文参考了CSDN博主「爱拍凯特」的文章,
// 链接:https://blog.csdn.net/apacat/article/details/111502396
/ 总结起来就是:
// vector与动态数组性质相同。
// 具体数据存放在堆区。
// 变量名存放在栈区。
// 变量名中存放的是堆区的首地址。(故,swap前后,存放在容器中第一个数据的首地址不改变)