c泛型演算法
1. 參考C++標准庫中的泛型演算法(如find等)設計並實現求最大值的泛型演算法max,該演算法返回容器中數據的最大值
#include/*演算法概要:a1, a2a2取第一個數a1作為組合的第一個數,然後從剩下的數a2an中取r-1個數進行剩下的組合,完成一次循環然後取第二個數a2作為組合的第一個數,然後從剩下的數a3an中取r-2個數進行剩下的組合,完成一次循環依此類推,得到全部的組合。*//* 進行排列輸出的主函數 a: n個數據的數組 n: 數據個數 r: 組合的r result: 緩存本次組合的數組 aindex: 當前組合的a下標 resultindex: 當前組合的結果下標*/ void C(int a[], int n, int r, int result[], int aindex, int resultindex){// 如果已經組合夠r個數據,輸出if (resultindex >= r){for (int x=0; x>n>>r; // 輸入組合的n,r值int* a = new int[n];for (int i=0; i>a[i]; // 輸入數據}CC(a, n, r); // 組合輸出delete[] a;return 0;}
2. C++ 容器 和 泛型的問題
容器好比裝東西的器具,迭代器就是用來指示容器中東西的位置。給你打個比方吧,現在有許多書籍放在書架上,那麼書架相當於容器,可以往書架上添加、刪除書籍,而迭代器相當於書籍的一個指針,可以指向任何一本書籍,通過迭代器可以取出書籍。
3. 從代碼上看如何區分c程序和c++程序
代碼量足夠的話,還是比較容易區分的,
比如說頭文件包含iostream的,出現bool,class,new,delete這樣新關鍵字的,有::操作符的,用cout,cin輸入輸出的,像p->fun()這樣調用函數的,都可以斷定是C++。如果僅僅是幾行賦值,算術表達式什麼的,就無法判斷了。
4. CString與string的區別
CString 是MFC或者ATL中的實現,
string是C++標准庫中的實現
string和CString均是字元串模板類,string為標准模板類(STL)定義的字元串類,已經納入C++標准之中;
CString(typedef CStringT<TCHAR, StrTraitMFC<TCHAR>> CString)為Visual C++中最常用的字元串類,繼承自CSimpleStringT類,主要應用在MFC和ATL編程中,主要數據類型有char(應用於ANSI),wchar_t(unicode),TCHAR(ANSI與unicode均可);
char*為C編程中最常用的字元串指針,一般以』\0』為結束標志;
在MFC、ATL中使用字元串盡量使用CString,畢竟都是微軟的孩子,各方面都比其它更有優勢,而在非微軟平台上或對移植性要求較高的場合推薦使用string,標准模板庫提供了那麼強大的泛型演算法,沒必要再自己去造車輪。
5. 我是學習c語言的初學者,想問一個題目
#include <stdio.h>
void main()
{
int max(int x, int y, int z);
int a, b, c, d;
scanf("%d,%d", &a, &b, &d);
c=max(a,b, d);
printf("max=%d\n",c);
}
int max(int x, int y, int z)
{
return ((x > y) ? (x > z ? x : z) : (y > z ? y : z));
}
6. c語言怎麼求當前電腦能表示的最大整型數
C++最大的整數類型是unsigned long long
你輸出sizeof(unsigned long long),就知道unsigned long long有多少位了,那你就知道有多大了吧
執行時間
用time.h里的計時函數,程序開始之前記錄一次時間,結束的時候記錄一次時間,兩次相減不就是你的函數的執行時間嗎?
7. C++ STL泛型演算法改錯
從句法上說(編譯錯誤)樓上說的不錯,只少了分號。
但運行出來的結果沒有達到期待的結果
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
template <typename T,int VAL>
T addValue(T const& x)
{
return x+VAL;
}
int main()
{
vector<int> Numbers, a1(8) ;
for (int i = 0; i != 8; ++i)
Numbers.push_back(i);
vector<int> ::iterator start, end, it,start1;
start = Numbers.begin() ;
start1 = a1.begin() ;
end = Numbers.end() ;
transform(Numbers.begin(), Numbers.end(), a1.begin(), addValue<int,5>);
cout << "Numbers { " ;
for(it = a1.begin(); it != a1.end(); ++it)
cout << *it << " " ;
cout << " }\n" << endl ;
}
這樣transform才有用處啊
還有cin.get();干什麼,後面又沒有代碼了
8. c++STL泛型編程sort演算法問題
你是指的是在sort泛型演算法中帶的參數有個謂詞吧。謂詞相當於sort中的1個參數,但是謂詞本身是個函數,你這里的是個返回bool類型的函數,這個函數有2個參數,分別是對形參a和b的const引用,然後比較a和b是否相等,如果a不等於b,那麼return a>b 返回的是表達式a>b的值,如果a比b大,值的true,否則值為false ,else return a>b 這里就是a==b的情況下才走到這里,肯定返回false了
在sort演算法里調用如下,比如定義了1個int的vector容器
vector<int> ivec;
sort(ivec.begin(),ivec.end(),Comp);
這里記住Comp後面不能帶參數了,直接寫函數名字即可,在排序的時候就會根據函數的返回結果為true的進行排序,也就是說從大到小排序。
9. 先把1到n中的所有奇數從小到大輸出,再把所有的偶數從小到大輸出 怎麼編程c語言
若是C++語言,就可直接使用標准庫中的泛型演算法STL
初始化兩個list listj(奇數),listo(偶數) ,先進行判斷,
for(2<=n<=10000 n++)
if(n%2!=0) listj.add(n);
if(n%2==0) listo.add(n);
最後分別遍歷listj和listo。
例如:
#include <stdlib.h>
#include <stdio.h>
void main()
{
int a[100]={0},b[100]={0},c;
int i=0,j=0,t,n,m;
while (i>=0)
{
if(!scanf("%d",&c))
break;
else
{
if(c%2==0)
a[i++]=c;
else
b[j++]=c;
}
}
for(m=0;m<i;m++)
{
for (t=0;t<i-m-1;t++)
{
if(a[t]>a[t+1])
{
n=a[t];
a[t]=a[t+1];
a[t+1]=n;
}
}
}
for(m=0;m<i;m++)
printf("%d ",a[m]);
for(m=0;m<j;m++)
{
for (t=0;t<j-m-1;t++)
if(b[t]<b[t+1])
{
n=b[t];
b[t]=b[t+1];
b[t+1]=n;
}
}
printf(" ");
for(m=0;m<j;m++)
printf("%d ",b[m]);
system("pause");
}
(9)c泛型演算法擴展閱讀:
C 語言的運算范圍的大小直接決定了其優劣性。C 語言中包含了34種運算符,因此運算范圍要超出許多其它語言,此外其運算結果的表達形式也十分豐富。此外,C 語言包含了字元型、指針型等多種數據結構形式,因此,更為龐大的數據結構運算它也可以應付。
9 類控制語句和32個KEYWORDS是C語言所具有的基礎特性,使得其在計算機應用程序編寫中具有廣泛的適用性,不僅可以適用廣大編程人員的操作,提高其工作效率,同 時還能夠支持高級編程,避免了語言切換的繁。