欢迎光临散文网 会员登陆 & 注册

C++函数可以利用vector容器实现函数返回多个值

2023-02-08 11:31 作者:__牛油果__  | 我要投稿

#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前后,存放在容器中第一个数据的首地址不改变)

C++函数可以利用vector容器实现函数返回多个值的评论 (共 条)

分享到微博请遵守国家法律