最近刚开始学c++,主要通过看书,视频以及学习网上大牛的笔记,以下程序是在网上和视频学习中,学习别人的程序后自己动手编写的,可能会有一些重复的地方,望谅解。
学习总结:
1.编写测试案例时可以使用不同的命名空间namespace,这样可以避免使用同一个变量,并且易于操作修改程序,看着也很舒服
2.在每个命名空间前添加此命名空间中所需要的头文件(不存在重复使用,c++内部能避免重复使用),不用都添加到顶部,这样可以清晰明了的知道此命名空间中使用的头文件
test1
简单运用namespace命名空间 class类 构造函数 析构函数 构造函数重载的小程序
#include<iostream>
using namespace std;
namespace Test1
{
class test
{
int *high, *weight, testnum;
public:
test(int, int);//---构造函数
~test();//----析构函数,释放内存
int area() {
return *high * *weight;
}
test(int);//---构造函数重载
int testapp() {
return 10 * testnum;
}
};
test::test(int x, int y)
{
high = new int;//---new的用法相当于mallac,分配内存
weight = new int;
*high = x;
*weight = y;
}
test::~test()
{
delete high;//---释放内存
delete weight;
}
test::test(int x)
{
testnum = x;
}
}
test2
运用友元函数的例程
类girl把类boy的成员函数disp作为友元函数,输出类girl中私有成员的年龄和身高
namespace Test2
{
class boy
{
int age;
int high;
public:
boy(int,int);
friend class girl;//--友元声明
void disp(girl &);//boy成员函数,做成girl类中友元函数实现
};
boy::boy(int x, int y)
{
age = x;
high = y;
}
class girl
{
int age;
int high;
public:
girl(int ,int);
friend void boy::disp(girl &);//这里把boy类的成员函数作为友元函数
};
girl::girl(int x,int y)
{
age = x;
high = y;
}
void boy::disp(girl &x)//--boy类成员函数实现,友元函数定义
{
cout << "boy's age is :" << age << " " << "boy's high is :" << high << endl;
cout << "girl;s age is :" << x.age << " " << "girl's high is :" << x.high << endl;
}
}
test3
学习vector基本用法+排序+二分查找+普通查找
程序:运用vector容器存储100000个随机数值,计算存储花费时间,
并通过普通查找和二分查找法查找(需要先排序)容器中是否含有12345这个数,比较两种查找方法所花时间
#include<vector>//---vector容器头文件
#include<ctime>//---时钟函数头文件
#include <algorithm>//---sort头文件
#include<cstdio>//--c库函数头文件
#include<cstdlib>//--sbort
#define SIZE 100000
namespace Test3
{
int compareints(const void *a, const void * b)
{
return (*(long*)a - *(long*)b);
}
void test()
{
cout << "testing begin ..........\n";
clock_t Time_start = clock();
vector<long> buf;
for (long i = 0; i < SIZE; i++)
{
try//----防止容器分配不到内存
{
buf.push_back(rand());
}
catch (exception& p)
{
cout << "i = " << i << "problem is " << p.what() << endl;//---曾有i = 136216567problem is bad allocation
abort();//--异常退出
}
}
cout << "存储容器花费时间为:" << clock() - Time_start << "ms"<<endl;
cout << "vector size:" << buf.size() << endl;
cout << "vector data:" << buf.data() << endl;
cout << "vector max_size:" << buf.max_size() << endl;
cout << "vector front:" << buf.front() << endl;
cout << "vector capacity:" << buf.capacity() << endl;//---目前容器的容量
Time_start = clock();
long key = 12345;
auto position = ::find(buf.begin(), buf.end(), key);//--作用域符号在这里表示全局模板函数,使用auto自动类型判断
cout << typeid(position).name() << endl;//-查看position的类型
cout << "查找数值12345花费时间为:" << clock() - Time_start << "ms" << endl;
if (position != buf.end())
{
cout << "find the num is " << *position << endl;
}
else
cout << "not find the num " << endl;
Time_start = clock();
sort(buf.begin(), buf.end());//--用sort排序
cout << "排序花费时间为:" << clock() - Time_start << "ms" << endl;
Time_start = clock();
long *pitem = (long *)bsearch(&key, buf.data(), buf.size(), sizeof(int), compareints);//--二分查找法查找
cout << "二分查找数值12345花费时间为:" << clock() - Time_start <<"ms"<< endl;
if (pitem != NULL)
cout << "find the num :" << *pitem << endl;
else
cout << "not find the num" << endl;
}
}
主函数块
int main()
{
using namespace Test1;//---使用命名空间Test1
test test00(3, 4);//---调用构造函数
test test11(5, 6);
cout << "Test1**************Test1\n";
cout << "第一个area:" << test00.area()<<endl;
cout << "第二个area:" << test11.area() << endl;
test test22(4);
cout << "testapp为:" << test22.testapp() << endl;
cout << "\n";cout << "\n";
using namespace Test2;
cout << "Test2**************Test2\n";
int a = 22, b = 170, c = 20, d = 160;
boy boy1(a,b);
girl girl1(c,d);
boy1.disp(girl1);
cout << "\n";cout << "\n";
using namespace Test3;
cout << "Test3**************Test3\n";
Test3::test();
return 0;
}
运行结果