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语言所具有的基础特性,使得其在计算机应用程序编写中具有广泛的适用性,不仅可以适用广大编程人员的操作,提高其工作效率,同 时还能够支持高级编程,避免了语言切换的繁。