打印练习
#include <iostream>using namespace std;int main(){ std::cout << "Hello World!\n"; int i, j, k, f; for (size_t i = 0; i < 4; i++) { for (size_t j = 0; j < 30; j++) { cout << " "; } for (size_t k = 0; k < 8-2*i; k++) { cout << " "; } for (size_t f = 0; f < 2*i; f++) { cout << "*"; } cout << endl; } for (size_t i = 0; i < 3; i++) { for (size_t j = 0; j < 30; j++) { cout << " "; } for (size_t f = 1; f < 7; f++) { cout << "*"; } cout << endl; }}
测试闰年
#include <iostream>using namespace std;int main(){ std::cout << "Hello World!\n"; int yearl; bool isLeapYear; cout << "Enter the year:"; cin >> yearl; isLeapYear = (((yearl % 4 == 0) && (yearl % 100 != 0)) || (yearl % 400 == 0)); if (isLeapYear) { cout << yearl << " is a leap year" << endl; } else { cout << yearl << " is not a lear year" << endl; }}
测试联合体
std::cout << "Hello World!\n"; aa.uu.x = 4; aa.uu.y = 5; aa.uu.z = 6; aa.k = 0; //覆盖掉第一个int空间值 printf("d% d% d% d%\n", aa.uu.x, aa.uu.y, aa.uu.z, aa.k);
随机掷骰子
#include <iostream>#include<stdio.h>#include<cstdlib>using namespace std;int rolldice();int main(){ std::cout << "Hello World!\n"; int flag; unsigned seed; cout << "请输入无符号整数:" << endl; cin >> seed; srand(seed); int sum = rolldice(); int selfdim; switch (sum) { case 7: case 11: flag = 1; break; case 2: case 3: case 12: flag = 2; break; default: flag = 0; selfdim = sum; break; } while (flag == 0) { sum = rolldice(); if (sum == selfdim) { flag = 1; } else if (sum = 7) { flag = 2; } } if (flag == 1) { cout << "player win\n"; } else { cout << "player lose\n"; }}int rolldice(){ int sum = 0; int dim1 = rand() % 6 + 1; int dim2 = rand() % 6 + 1; sum = dim1 + dim2; cout << "sum=" << dim1 << "+" << dim2 << endl; return sum;}
递归
#include <iostream>#include<stdio.h>#include<cstdlib>using namespace std;int f(int n);int main(){ std::cout << "Hello World!\n"; std::cout << "input x!\n"; int x; cin >> x; cout << f(x) << endl; return 0;}int f(int n){ if (n==0) { return 1; } else { return n * f(n - 1); }}
内联函数
#include <iostream>#include<stdio.h>#include<cstdlib>using namespace std;//函数声明inline double CalArea(double radius);int main(){ std::cout << "Hello World!\n"; double r(3.0); double area; area = CalArea(r); cout << area << endl; return 0;}//加关键字inlineinline double CalArea(double radius){ return 3.14 * radius * radius;}
综合练习(类等)
#include <iostream>#include<stdio.h>#include<cstdlib>using namespace std;const float PI = 3.14159;const float FencePrice = 35;const float ConcretPrice = 20;class Circle{public: Circle(float r); ~Circle(); float Circumference() const; float Area() const;private: float radious;};Circle::Circle(float r){ radious = r;}Circle::~Circle(){}float Circle::Circumference() const{ return PI * 2 * radious;}float Circle::Area() const{ return PI * radious * radious;}int main(){ std::cout << "Hello World!\n"; cout << "请输入游泳池半径\n"; float radius; float FenceCost, ConcretCost; cin >> radius; Circle circle(radius); Circle circle2(radius+3); // 计算栅栏造价并输出 FenceCost = circle.Circumference() * FencePrice; cout << "Fencing Cost is ¥" << FenceCost << endl; ConcretCost = (circle2.Area() - circle.Area()) * ConcretPrice; cout << "Concrete Cost is ¥" << ConcretCost << endl; return 0;}
常对象
//main.cpp#include<iostream>using namespace std;class AA{public: AA(); ~AA(); AA(int r1, int r2) { R1 = r1; R2 = r2; } //const区分成员重载函数 void print(); void print() const;private: int R1, R2;};AA::AA(){}AA::~AA(){}void AA::print(){ cout << "普通调用" << endl; cout << R1 << ":" << R2 << endl;}//实例化也需要带上void AA::print() const{ cout << "常对象调用" << endl; cout << R1 << ";" << R2 << endl;}int main() { AA a(5, 4); a.print(); //调用void print() //通过常对象只能调用它的常成员函数 const AA b(20, 52); b.print(); //调用void print() const return 0;}
重载运算符()
#include <iostream>using namespace std;class Time{public: Time(); ~Time(); Time(int h = 0, int m = 0, int s = 0) :hh(h), mm(m), ss(s) {} void operator() (int h, int m, int s) { hh = h; mm = m; ss = s; } void ShowTime() { cout << hh << ":" << mm << ":" << ss << endl; }private: int hh, mm, ss;};Time::Time(){}Time::~Time(){}int main(){ Time t1(12, 12, 33); t1.ShowTime(); t1.operator()(33, 34, 56); t1.ShowTime(); t1(23, 43, 56); t1.ShowTime(); return 0;}
抽象类
#include <iostream>using namespace std;class Figure{public: Figure(); ~Figure(); void set(double i, double j) { x = i; y = j; } virtual void area() = 0;private:protected: double x, y;};Figure::Figure(){}Figure::~Figure(){}class Triangle:public Figure{public: Triangle(); ~Triangle(); void area() { cout << "三角形面积:" << x * y * 0.5 << endl; }private:};Triangle::Triangle(){}Triangle::~Triangle(){}class Rectangle:public Figure{public: Rectangle(); ~Rectangle(); void area() { cout << "矩形面积:" << x * y * 1 << endl; }private:};Rectangle::Rectangle(){}Rectangle::~Rectangle(){}int main(){ Figure* fg = nullptr; Rectangle r; Triangle t; t.set(2, 3); fg = &t; fg->area(); r.set(3, 5); fg = &r; fg->area(); Figure &rrf = t; rrf.set(4, 5); rrf.area();}
重载() []
#include<iostream>using namespace std;class X{public: int operator() (int i = 0) { cout << "X::operator(" << i << ")" << endl; return i; }; int operator() (int i, int j) { cout << "X::operator(" << i << "," << j << ")" << endl; return i; }; int operator[] (int i) { cout << "X::operator[" << i << "]" << endl; return i; }; int operator[] ( char* cp) { cout << "X::operator[" << cp << "]" << endl; return 0; };};int main(void){ X obj; char data[] = "ass"; int i = obj(obj(1), 2); int a = obj[i]; int b = obj[data]; cout << "a=" << a << endl; cout << "b=" << b << endl; //system("pause");}
[] 实战
#include<iostream>#include<cstring>#include<cstdio>using namespace std;struct Person { double salary; char *name;};class SalaryManager {public: SalaryManager(); ~SalaryManager(); SalaryManager(int Max = 0) { max = Max; n = 0; employ = new Person[max]; } double &operator[](char *Name)//重载[],返回引用 { Person *p; for (p = employ; p < employ + n; p++) { //如果存在则处理 if (strcmp(p->name, Name) == 0) { return p->salary; } } p = employ + n++; p->name = new char[strlen(Name) + 1]; strcpy(p->name, Name); p->salary = 0; return p->salary; } void display() { for (int i = 0; i < n; i++) { cout << employ[i].name << " " << employ[i].salary << endl; } }private: Person *employ;//存放职工信息的数组 int max; //数组下标上界 int n; //数组中的实际职工人数};SalaryManager::SalaryManager() {}SalaryManager::~SalaryManager() {}int main() { SalaryManager s(3); s["张三"] = 2323; s["李四"] = 34343; s["王五"] = 3432; cout << "zhangsan\n" << s["张三"] << endl; cout << "lisi\n" << s["李四"] << endl; s.display();}
线程1 (范围锁,等待,唤醒)
#include <iostream> // std::cout#include <thread> // std::thread#include <mutex> // std::mutex, std::unique_lock#include <condition_variable> // std::condition_variablestd::mutex mtx; // 全局互斥锁.std::condition_variable cv; // 全局条件变量.bool ready = false; // 全局标志位.void do_print_id(int id){ std::cout << "thread " << id << "start"<<'\n'; std::unique_lock <std::mutex> lck(mtx); while (!ready) // 如果标志位不为 true, 则等待... cv.wait(lck); // 当前线程被阻塞, 当全局标志位变为 true 之后, // 线程被唤醒, 继续往下执行打印线程编号id. std::cout << "thread " << id << '\n';}void go(){ std::unique_lock <std::mutex> lck(mtx); ready = true; // 设置全局标志位为 true. cv.notify_all(); // 唤醒所有线程.}int main(){ std::thread threads[10]; // spawn 10 threads: for (int i = 0; i < 10; ++i) threads[i] = std::thread(do_print_id, i); std::cout << "10 threads ready to race...\n"; go(); // go! for (auto & th:threads) th.join(); return 0;}
线程2 生产者消费者问题
#include<iostream>#include<deque>#include<thread>#include<mutex>#include<condition_variable>#include<windows.h>using namespace std;deque<int> q;mutex mu;//锁机制condition_variable cond;//通信用的条件变量int c=0;//缓冲区的产品个数void producer(){ int data1; while (true) { if(c<3) //限流 { data1=rand(); unique_lock<mutex> lck(mu); //锁 q.push_front(data1); cout<<"存了"<<data1<<endl; cond.notify_one(); //通知取 ++c; } Sleep(500); }}void consumer(){ int data2; //data用来覆盖存放取的数据 while(true) { unique_lock<mutex> locker(mu); while (q.empty()) { cond.wait((locker)); //wait()阻塞前会先解锁,解锁后生产者才能获得锁来把产品放到缓冲区;生产者notify后,将不再阻塞,且自动又获得了锁. //线程在 condition_variable上等待时,会释放已持有的锁,直至被唤醒后(此时队列非空)重新获取锁。 } data2=q.back(); //取的第二步 cout<<"got "<<data2<<endl; --c; } Sleep(1500);}int main(){ thread t1(producer); thread t2(consumer); t1.join(); t2.join(); return 0;}
随机数
#include<iostream>#include<vector>#include<random>using namespace std;using my_engine= default_random_engine; //引擎类型using my_distribution= uniform_int_distribution<>; //分布类型class Rand_int{public: Rand_int(int low, int high):dist(low, high){} int operator()(){return dist(re);}private: default_random_engine re; uniform_int_distribution<> dist;};int main(){ Rand_int rnd{0,4}; //创建一个随机数生成器 vector<int> histogram(5); //构建一个相应尺寸的vector for(int i=0;i!=200;++i) { ++histogram[rnd()]; //用[0:4]之间的每个数字出现的次数填充histogram } for(int i=0;i!=histogram.size();++i) { cout<<i<<'\t'; for(int j=0;j!=histogram[i];++j) cout<<'*'; cout<<endl; }}
线程 future(有问题,乱码)
#include <iostream>#include <thread>#include <mutex>#include<future>#include<Windows.h>using namespace std;double t1(const double a, const double b){ double c = a + b; Sleep(3000);//假设t1函数是个复杂的计算过程,需要消耗3秒 return c;}int main(){ double a = 2.3; double b = 6.7; future<double> fu = async(t1, a, b);//创建异步线程线程,并将线程的执行结果用fu占位; cout << "waiting..." << endl; cout << "wait a moment" << endl; cout<<a<<"+"<<b<<"="<<endl; cout << "result:" << fu.get() << endl;//阻塞主线程,直至异步线程return //cout << "计算结果:" << fu.get() << endl;//取消该语句注释后运行会报错,因为future对象的get()方法只能调用一次。 return 0;}