動態參數函數
編寫一個動態參數的函數,使函數能夠適應不同的參數個數。
思路:利用函數的省略參數,功能實現依賴於幾個stdarg.h中定義的宏:
1、 va_list:行爲有點像數據類型,定義一個參數列表
2、 va_start:行爲有點像函數,參數爲va_list類型的參數列表以及參數個數
3、 va_arg:行爲像函數,參數爲va_list參數表以及參數數據類型,返回對應類型的參數值。
4、 va_end:行爲像函數,參數爲va_list的參數表函數功能:接收不同個數和類型的參數,,當然參數給的規律還是需要約定好的,這裏約定每組一個字符串類型和整型,供N組。
#include <iostream>
#include <stdarg.h>
void arameter(int num, ...) {
va_list arg_list;
va_start(arg_list,num); //讀取所有參數數據
while (num--) {
char* arg_string = va_arg(arg_list, char*);
int arg_int = va_arg(arg_list,int);
//float arg_float = va_arg(arg_list, float);
cout << arg_string << '\t' << arg_int << '\t' << endl;
}
va_end(arg_list);
}
arameter(2, "world", 5,"hello",4);
利用指針做參數,實現兩數互換
編寫一個函數,利用指針作爲參數,實現兩個數的互換。
#include <iostream>
void swap(int* a, int* b) {
int temp;
temp = *a;
*a = *b;
*b = temp;
}
int x = 10, y = 20;
cout << "互換前的x爲" << x << ",y爲:" << y << endl;
swap(&x, &y);
cout << "互換前的x爲" << x << ",y爲:" << y << endl;
利用遞歸函數,遍歷指定目錄下的所有文件
用C++語言編寫一個遞歸函數,遍歷指定目錄下的所有文件。
選需要了解文件查找的相關信息,這樣才能理解下面的代碼。
#include<io.h>
#include<stdio.h>
#include <string>
void ListDir(const char* pchData)
{
_finddata_t fdata; //定義存儲文件信息的結構體
char tempdir[MAXLEN] = { 0 };
strcat(tempdir, pchData);
strcat(tempdir, "\\*");
long done = _findfirst(tempdir, &fdata);//充當手柄
if (done != -1)
{
int ret = 0;
while (ret != -1) //直到_findnext返回-1爲止,即已經到達最後一個文件位置
{
if (fdata.attrib != _A_SUBDIR) //不是文件夾,即文件,就輸出文件名,文件數量加1
{
if (strcmp(fdata.name, "...") != 0 &&
strcmp(fdata.name, "..") != 0 && //..表示上一級目錄
strcmp(fdata.name, ".") != 0) //.表示當前目錄
{
char dir[MAXLEN] = "";
strcat(dir, pchData);
strcat(dir, "\\");
strcat(dir, fdata.name);
printf("%s\n", dir);
filenum++;
}
}
ret = _findnext(done, &fdata);
if (fdata.attrib == _A_SUBDIR && ret != -1) //是文件夾(目錄),就遞歸
{
if (strcmp(fdata.name, "...") != 0 &&
strcmp(fdata.name, "..") != 0 &&
strcmp(fdata.name, ".") != 0)
{
char pdir[MAXLEN] ="";//{ 0 }
strcat(pdir, pchData);
strcat(pdir, "\\");
strcat(pdir, fdata.name);
ListDir(pdir);
}
}
}
}
}
filenum = 0;
ListDir("D:\\Pyvirtual\\Test\\Include");
printf("共計%d個文件\n", filenum);
利用函數模板,實現各種數據類型數組進行排序
編寫一個函數模板,實現對各種數據類型數組進行從小到大的排序。
#include <iostream>
template <class type,int len>
void any_bubble(type intlist[len]) {
type temp;
int i, j;
for (i = 1; i < len; i++) {
for (j = 0; j < len - i; j++) {
temp = intlist[j];
if (intlist[j] > intlist[j + 1]) {
intlist[j] = intlist[j + 1];
intlist[j + 1] = temp;
}
}
}
}
int arr_i[10] = { 1,8,5,6,7,2,3,10,11,12 };
any_bubble<int,10>(arr_i);
for (int i = 0; i < 10; i++) cout << arr_i[i] << " ";
float arr_f[10] = { 5.1,3.8,2.5,6.9,4.7,8.2,10.3,10.9,9.1,12.9 };
any_bubble<float,10>(arr_f);
cout << endl;
for (int i = 0; i < 10; i++)
cout << arr_f[i] << " ";