C++ - 技术教程文章

Visual C++2010开发权威指南 中文高清PDF - VC.NET

第一部分 Visual C++ 2010开发与新特性第1章 Visual C++ 2010开发环境简介 11.1 Visual C++ 2010简介 11.2 Visual C++ 2010下载安装指南 11.3 Visual C++ 2010主要特点与1.3 新特性 31.4 Visual C++ 2010开发环境操作1.4 指南 61.4.1 创建Visual C++应用程序 61.4.2 Visual C++ 2010菜单介绍 91.5 Visual C++ 2010 MFC简介 121.6 Visual C++ 2010 CLR简介 131.7 Visual C++ 2010 64位编程 141.8 支持新...

C++11 多线程 - Part 5:使用锁解决争用条件【代码】

翻译自:https://thispointer.com//c11-multithreading-part-5-using-mutex-to-fix-race-conditions/在本文中,我们将讨论如何在多线程环境中使用互斥锁来保护共享数据,并避免争用条件。为了修复多线程环境中的争用条件,我们需要互斥锁,即每个线程在修改或读取共享数据之前都需要锁定互斥锁,修改数据之后,每个线程都应该解锁互斥锁。4><font color = #660000>std::mutex在C++11线程库中,互斥体位于头文件中。表示互斥对象的类...

【C++11】lambda 表达式

概述C++ 11中引入了新的lamdba表达式,使用也很简单,我最喜欢的是不用给函数取名称,每次给函数取名称都感觉自己读书太少~1、lambda表达式lambda表达式可以理解为一个匿名的内联函数。和函数一样,lambda表达式具有一个返回类型、一个参数列表和一个函数体。与函数不一样的是lambda必须使用尾置返回类型。一个lambda表达式表示一个可调用的代码单元。语法:[capture list] (parameter list) -> return type {function body}captur...

C++学习笔记(7)标准库string类【代码】

一、初始化string对象:      直接初始化:string a("value");      拷贝初始化:string a = "value";二、读写string对象      注:cin会忽略头尾空白处,保留空白符需要使用getline;      empty函数判断是否为空,size函数计算字符串长度。      不能把多个字面值直接相加赋值给string对象,字符串字面值不是string对象。三、范围for语句的使用string str("some,string!!!");for(auto c : str){co...

C++友元函数和友元类

最近这些天在重温设计模式GOF23,偶然想到友元,不使用都快忘了今天重温一下C++友元知识,学了之后几乎就没怎么用到,几乎都是与设计模式打交道的。虽然说友元能提高效率,表达清晰,但是破坏了类的封装机制,所以一般情况下不建议使用友元, 友元类简单demo:// 类A,希望把私有成员公开给类B class A {friend class B;// 把B设置为友元类 public:A(int i):m_i(i){} private:int m_i;int getInt(){return 100;} }; // 类B,希望访问...

Boost.Asio c++ 网络编程翻译(20)【代码】

异步服务端这个图表是相当复杂的;从Boost.Asio出来你可以看到4个箭头指向on_accept,on_read,on_write和on_check_ping。着也就意味着你永远不知道哪个异步调用是下一个完成的调用,但是你可以确定的是它是这4个操作中的一个。现在,我们是异步的了;我们可以继续保持单线程。接受客户端连接是最简单的部分,如下所示:ip::tcp::acceptor acceptor(service, ip::tcp::endpoint(ip::tcp::v4(),8001));void handle_accept(talk_to_c...

C++ Primer Plus 第十一章总结——使用类【代码】

1.运算符重载是一种多态形式,是对象操作更加美观方便。其限制为:不能违反运算符原来的句法规则,不能修改运算符的优先级,不能创建新运算符;“=、()、[]、->”四个运算符只能通过成员函数进行重载。 result = obj1.operator op(obj2); //显示调用 result = obj1 op obj2; //隐式调用2.使用重载函数的版本选择标准是参数的数目、类型和排列顺序,即特征标。3.不要返回指向局部变量或临时对象的引用,函数执行完毕时,引...

TinyWS —— 一个C++写的简易WEB服务器(一)【代码】

写在前面每个码农可能都会偶尔有自己做一个常用软件的想法,比如操作系统,编译器,邮件服务器/客户端,文字编辑器等等。这里面有些很难,比如操作系统,做一个最简单的也要付出很大的努力,可是大部分常用工具都是可以比较容易的做一个简易版本(当然也是只能玩玩而已)。于是我做了一个非常简陋的WEB服务器 —— TinyWS。这里主要是记录下自己整个过程中的一些想法。TinyWS是用C++”从头开始“做的,也就是说,除了C/C++的标准库...

C++入门笔记(二)类与对象【图】

1、特性简介 1、抽象 abstract,抽象是对具体对象(问题)进行概括,抽出这一类对象的公共性质并加以描述的过程。 抽象成一个类:数据抽象+代码抽象 2、封装 将抽象出的数据成员代码、代码成员相结合,将它们视为一个整体。 实现封装:类声明中的 { } 3、继承与派生 C++语言中提供了类的继承机制,允许程序员在保持原有类特性的基础上,进行更具体、更详细的说明。 4、多态 多态,是指具...

292. Nim Game(C++)【代码】

292. Nim Game(C++)You are playing the following Nim Game with your friend: There is a heap of stones on the table, each time one of you take turns to remove 1 to 3 stones. The one who removes the last stone will be the winner. You will take the first turn to remove the stones.Both of you are very clever and have optimal strategies for the game. Write a function to determine whether you can win the...

第七届蓝桥杯省赛C/C++B组赛题及答案【代码】【图】

第一题【题目】煤球数目有一堆煤球,堆成三角棱锥形。具体:第一层放1个,第二层3个(排列成三角形),第三层6个(排列成三角形),第四层10个(排列成三角形),....如果一共有100层,共有多少个煤球?请填表示煤球总数目的数字。注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。【提示】找出每一层煤球个数的规律,循环累加计算【答案】 1 #include<stdio.h>2int main()3{4int i,s=1,num=1;5for(i=2;i<=100;...

C++智能指针初学小结【代码】

本篇随笔仅作为个人学习《C++ Primer》智能指针一节后的部分小结,抄书严重,伴随个人理解。主要介绍shared_ptr、make_shared、weak_ptr的用法和联系。  C++通过一对运算符 new 和 delete 进行动态内存管理,new在动态内存中为对象分配空间并返回一个指向该对象的指针,delete接受一个动态对象的指针,销毁对象并释放与之相关的内存。然而这样的动态内存的使用很危险,因为无法确保始终能在合适的时间释放内存对象。如果忘记释放...

c++ liburl http get

//#define MULTI_CURL_NUM 3//std::string CChatRecords::AsyncHttp(wchar_t* wxid,wchar_t* ques)//{// string url = "http://api.qingyunke.com/api.php?key=free&appid=0&msg=你好吗";// string proxy = "api.qingyunke.com:80";// unsigned int timeout = 20000;// int code = curl_multi_demo(wxid, url, proxy, timeout);//} //// 这里设置你需要访问的url // //std::string URL = "http://website.com";//// 这里设置...

条款5:了解C++默默编写并调用哪些函数

当写下如下空类时:class Empty{};编译器处理后变成;class Empty {public:Empty() {}//默认构造函数Empty(const Empty&) {}//默认拷贝构造函数~Empty(){}//默认析构函数Empty& operator=(const Empty&) {}//默认赋值操作符};编译器产出的析构函数是一个non-virtual版本,除非这个class的base class自身声明有virtual析构函数。编译器产出copy构造函数和copy assignment操作符,只是单纯地将来源于对象的每一个non-static成员变量拷...

大话设计模式C++实现-第20章-迭代器模式【图】

一、UML图二、概念 迭代器模式(Iterator):提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。三、说明什么时候用?(1)当你需要访问一个聚集对象,而且不管这些对象时什么都需要遍历的时候,你就应该考虑用迭代器模式。(2)你需要对聚集有多种遍历时,可以考虑用迭代器模式。(3)为遍历不同的聚集结构提供如开始、下一个、是否结束、当前哪一项等统一的接口。迭代器模式的好处?迭代器模式就是分离了...

C++实现一个线程安全的单例模式【代码】

class A { public://静态函数,返回引用static A &GetInstance(){//静态局部变量static A s_instance;return s_instance;} private://默认构造函数A() = default;/*拷贝构造函数用一个已存在对象构造同类型的副本对象时,会调用拷贝构造函数。class 类名{public:类名(const 类名& that){...}};*/A(const A &that) = delete; //禁止使用拷贝构造函数A& operator=(const A&that) = delete; //禁止使用拷贝赋值用算...

[C++]一个面试官问了无数次的问题--什么是“多态”【代码】

C++ Prime 里有原话(中文):这种“用基类的指针或引用操纵多个类型”的能力被称为多态(polymorphism)。例如有基类Camera, 他的子类有各种Camera,然后已知函数:void lookat(const Camera *pcamera);在实现lookat()时,只要对基类Camera的接口进行编程,而与 指针 pcamera 指向的具体是哪一个类无关(Camera有很多子类)。 每个单独的lookat()调用都会被传入一个Camera子类对象地址。编译器会自动地把他们转换成适当的基类指针。...

面试题42: 连续子数组的最大和(C++)【代码】

题目地址:https://leetcode-cn.com/problems/lian-xu-zi-shu-zu-de-zui-da-he-lcof/题目描述输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)题目示例示例1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。解题思路动态规划:我们假设动态规划列表为f,f(i)代表以元素nums[i]为结尾的连续子数组...

C++求连续的子数组和【代码】

给你一个整数数组 nums 和一个整数 k ,编写一个函数来判断该数组是否含有同时满足下述条件的连续子数组:子数组大小 至少为 2 ,且子数组元素总和为 k 的倍数。如果存在,返回 true ;否则,返回 false 。如果存在一个整数 n ,令整数 x 符合 x = n * k ,则称 x 是 k 的一个倍数。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/continuous-subarray-sum示例 1:输入:nums = [23,2,4,6,7], k = 6 输出:true 解...

C++11之decltype

使用场景 在C++中经常要用到很长的变量名,如果已经有变量和你将使用的变量是一个类型,即可使用decltype关键字来申明一样的类型变量。decltype原理 返回现有变量类型,decltype是一个关键字,而不是一个函数,这有啥区别呢?decltype在编译阶段返回变量类型,而不是在运行阶段传递不同变量返回不同值。decltype使用范例1、复杂已知变量类型map<string, vector<string>> str_map; decltype(str_map) str_map_new;2、表达式...

C++内存检测(定位到确定地址,并且用hash表来保存提高了搜索效率)

#include <iostream> #include <malloc.h> #include <string.h> #include <stdio.h> #define DefaultSize 7 using namespace std; struct Node {char *pname;//文件名字int line;//行号int size;//大小long long save;//存储地址ipNode *next; };struct HashNode {Node *adj;HashNode():adj(NULL){}//向量数组,保存指定向量。 };class HashList {public:HashList(){}void Insert(Node *p){int index = Find(p->save&((long long)0...

c++ 11 声明

1. autoc++11将其用于实现自动类型推断。这要求进行显示初始化,让编译器能够将变量的类型设置为初始值的类型。auto maton = 112; // maton is type intauto pt = &maton; //pt is type int *double fm(double, int);auto pf = fm; //pf is type double (*) (double, int)关键字auto还可以简化模板声明。 例如,如果i1是一个std::initializer_list<double> 对象, 则可将下述代码:for (std::initializer_list<double>::iterat...

C++学习之路—多态性与虚函数(一)利用虚函数实现动态多态性【代码】

(根据《C++程序设计》(谭浩强)整理,整理者:华科小涛,@http://www.cnblogs.com/hust-ghtao转载请注明) 多态性是面向对象程序设计的一个重要特征。顾名思义,多态性就是一个事物具有多种形态。在面向对象方法中一般是这样表述多态性的:向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为。也就是说,每个对象可以用自己的方式去响应共同的消息,所谓消息,就是调用函数,不同的行为就是指不同的实现,即执...

『C++』Temp_2018_12_26_02【代码】

1 #include <iostream>2 #include <string>3 #include <stdio.h>4 #include <stdlib.h>5usingnamespace std;6 7struct Person8{9int age; 10int id; 11}; 1213 template <class T> T myRead(void * memory) 14{ 15char buffer[sizeof(T)]; 16 memcpy(buffer, memory, sizeof(T)); 17 T temp = *((T *)buffer); // 调用 Person 拷贝构造18return temp; 19} 2021 template <class T> T myRead2(void * memory) 22{ 23 T ...

C++多小球非对心弹性碰撞(HGE引擎)【图】

程序是一个月前完成的,之前一直没正儿八经的来整理下这个程序,感觉比较简单,不过即使简单的东西也要跟大家分享下。源码下载:http://download.csdn.net/detail/y85171642/7209727开篇 开始上代码之前我先说下我为啥写的这个程序,大三的时候学习C#接触过GDI+而发现原来做图形界面的程序也可以这么简单。之后便开始用GDI+做起动画、游戏等,其中便有一个模拟多小球碰撞的,在CSDN上有分享过( http://pan.baidu.com/s/1qWj...

LeetCode682 栈·棒球比赛(C++)【代码】

题目描述:你现在是棒球比赛记录员。给定一个字符串列表,每个字符串可以是以下四种类型之一:1.整数(一轮的得分):直接表示您在本轮中获得的积分数。2. "+"(一轮的得分):表示本轮获得的得分是前两轮有效 回合得分的总和。3. "D"(一轮的得分):表示本轮获得的得分是前一轮有效 回合得分的两倍。4. "C"(一个操作,这不是一个回合的分数):表示您获得的最后一个有效 回合的分数是无效的,应该被移除。每一轮的操作都是永久性...

从C到C++ (2)

从C到C++ (2)一、 C++中增加了作用域标示符 ::1、 用于对局部变量同名的全局变量进行访问。2、 用于表示类成员。二、 new、delete运算符1、 new运算符用于创建堆空间,成功返回首地址失败抛出异常(C++有异常处理机制,C语言中无此机制所以结果要与NULL比较),语法: 指针变量 = new 数据类型; 指针变量 = new 数据类型[长度] 例如: int *p; p...

C++中wstring和string的互相转换

1、wstring 转换为string#include <string> std::string ws2s(const std::wstring& ws) {std::string curLocale = setlocale(LC_ALL, NULL); // curLocale = "C";setlocale(LC_ALL, "chs");const wchar_t* _Source = ws.c_str();size_t _Dsize = 2 * ws.size() + 1;char *_Dest = new char[_Dsize];memset(_Dest,0,_Dsize);wcstombs(_Dest,_Source,_Dsize);std::string result = _Dest;delete []_Dest;setlocale(LC_ALL, cu...

关于DEV-c++ 运行窗口闪退的解决办法【代码】

因为程序默认运行结束自动关闭,所以运行窗口会被秒关,反复下载了很多遍也没有解决。上网看过许多博客后,有好多方法,总结一下:①在return 0;前加getchar();(getchar();是得到一个字符的意思,可以char a=getchar();)。不过如果有输入语句,那就要加多些getchar();。②加头文件#include<stdlib.h>,并且在return 0;前加system("pause");让它按任意将继续。③一种非常好(搞)用(笑)的方法:在程序结束的最后加上while...

c++异常处理

C++异常当然可以通过try...catch处理,不过没有finally关键词。C++资源的释放可以通过RAII实现。RAII,也称为“资源获取就是初始化”,是c++等编程语言常用的管理资源、避免内存泄露的方法。它保证在任何情况下,使用对象时先构造对象,最后析构对象。Destructors should never emit exceptions. If functions called in a destructor may throw, the destructor should catch any exceptions, then swallow them or terminate the...