91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用c中變長參數

發布時間:2021-10-14 13:53:55 來源:億速云 閱讀:151 作者:iii 欄目:編程語言

本篇內容主要講解“如何使用c中變長參數”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何使用c中變長參數”吧!

1.使用模板中的變長參數函數聲明

#include <iostream>
using namespace std;

/*變長參數函數模板聲明*/
template <typename... T>
void print(T... val);

/*邊界條件*/
void print(void)
{
cout<<"here end"<<endl;
}

/*遞歸的特例化定義*/
template <typename T1, typename... T2>
void print(T1 start, T2... var)
{
cout<<"sizeof ... now is: "<<sizeof... (var)<<endl;
cout<<start<<endl;
print(var...);
}


int main(void)
{
print(1,2,3,4);
return 0;
}

其中的聲明其實是沒什么用的,只是告訴使用者可以按照這樣的格式使用,如果不做這個聲明,只保留"邊界條件"和"遞歸的特例化定義",這樣雖然可行,但是未免會造成困惑

執行結果如下:

如何使用c中變長參數

實際上,這個"變長"付出的代價還是很大的,要遞歸的實例出n個函數,最終再調用邊界條件的函數。過程如下

如何使用c中變長參數

如何使用c中變長參數

2.使用va_list()函數實現變長參數列表

以一個矩陣自動識別維度的程序為例

arrayMat.h

#include<iostream>
#include<string>
#include<stdarg.h>
using namespace std;
typedef int dtype;

class mat
{
public:
	mat();
	~mat();
	void set_dim(int dim);
	void mat::set_mat_shape(int i,...);
	int  get_dim();
	int* get_mat_shape();
	void print_shape();
	dtype* make_mat();
private:
	int dim;
	int *shape;
	dtype *enterMat;
};

arrayMat.cpp

#include"arrayMat.h"
mat::mat()
{
}

mat::~mat()
{
}

int mat::get_dim() {
	return this->dim;
}

int * mat::get_mat_shape() {
	return this->shape;
}

void mat::print_shape()
{
	for (int a = 0; a < this->dim; a++) {
		std::cout << shape[a] << " " ;
	}
}



void mat::set_dim(int i) {
	this->dim = i;
}

void mat::set_mat_shape(int i, ...) {
	va_list _var_list;
	va_start(_var_list, i);
	int count = 0;
	int *temp=new int[100];
	while (i != -1) {
		//cout << i <<" ";
		temp[count] = i;
		count++;
		i = va_arg(_var_list, int);
	}
	va_end(_var_list);
	this->set_dim(count);
	this->shape = temp;
	//std::cout << std::endl;
	//this->shape = new int [count];
	//for (int j = 0; j < count; j++)
		//shape[j] = temp[j];
}

//Mat2D A[i][j] = B[i + j * rows]

main.cpp

#include"arrayMat.h"


int main() {
	mat m1,m2;
	m1.set_mat_shape(1,3,128,128,-1);
	int *shape = m1.get_mat_shape();
	int dim = m1.get_dim();
	cout << "dim: " << dim<<endl;
	for (int i = 0; i < dim; i++)
		cout <<*(shape+i) <<" ";
	m1.print_shape();
	//m1.make_mat();
	//m2.set_mat_shape(3,3);
	//m2.make_mat();
	//m2.print_mat();
	return 0;
}

運行結果:

如何使用c中變長參數

到此,相信大家對“如何使用c中變長參數”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

巴楚县| 定南县| 财经| 安阳市| 水富县| 合阳县| 偃师市| 县级市| 平顶山市| 武陟县| 定州市| 哈尔滨市| 南华县| 通海县| 大渡口区| 九龙城区| 松溪县| 苏尼特左旗| 辰溪县| 白朗县| 卢湾区| 桃园市| 永修县| 满洲里市| 志丹县| 礼泉县| 内江市| 石泉县| 板桥市| 闻喜县| 望奎县| 江阴市| 海门市| 讷河市| 新营市| 磐安县| 昭觉县| 赤峰市| 绥中县| 土默特右旗| 白玉县|