summary2 map(STL关联容器)、#if 0 #endif、try.....catch..... throw、虚函数和纯虚函数、C++多线程、GetScrollPos

1、map(STL关联容器)

map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的。

pair的类型:pair 是 一种模版类型。每个pair 可以存储两个值。这两种值无限制。也可以将自己写的struct的对象放进去

使用map得包含map类所在的头文件:    #include <map> //注意,STL头文件没有扩展名.h

#include<map>
#include<string>
#include<iostream>
using namespace std;
int main()
{
    map<int, string>mapStudent;
    mapStudent.insert(pair<int, string>(1, "student_one"));
    mapStudent.insert(pair<int, string>(2, "student_two"));
    mapStudent.insert(pair<int, string>(3, "student_three"));
    map<int, string>::iterator iter;
    for (iter = mapStudent.begin(); iter != mapStudent.end(); iter++)
    {
        cout << iter->first << " " << iter->second << endl;
    }
    system("pause");
    return 0;

}

https://baike.baidu.com/item/Map/5808503

value_type 就是stl容器盛装的数据的数据类型。

vector<int> vec;

vector<int>::value_type x;

上述两句代码,第一句是声明一个盛装数据类型是int的数据的vector,第二句是使用vector<int>::value_type定义一个变量x,这个变量x实际上是int类型的,因为vector<int>::value_type中声明的为int型。

https://blog.csdn.net/lg1259156776/article/details/77992822

2、wstring与string的区别

发现一个问题,VS2017中按照网上写的代码出来的都乱码,求解。

https://bbs.csdn.net/topics/392514423

 

3、#if 0 #endif

#if 0 #endif 可以解决 /*......*/ 嵌套注释出现的问题。

https://blog.csdn.net/raining_heart/article/details/8019535

#if 0  ,  #if 1  ,  #else   ,  #endif

https://blog.csdn.net/wwwsssZheRen/article/details/79077141

4、try.....catch.....    throw

使用  try  catch 的原因:人们设计出来的程序,做不到天衣无缝,在运行时总会出现各种意想不到的异常。因此,希望程序不仅能在正确的情况下正常运行,而且在程序有错误的情况下也能作出相应的处理,而不致使程序莫名其妙的终止崩溃,甚至出现死机的现象。比如做除法时分母遇到0,访问到了非法指针。

https://blog.csdn.net/Dengdew/article/details/80617344

https://blog.csdn.net/gukesdo/article/details/6901991#commentsedit

 

5、虚函数和纯虚函数,为什么定义虚函数?

https://blog.csdn.net/hackbuteer1/article/details/7558868

定义一个函数为虚函数,不代表函数为不被实现的函数。
定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。
定义一个函数为纯虚函数,才代表函数没有被实现。

定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。

6、C++多线程

join(): 阻塞主线程,等待当前线程执行完之后才继续执行后面的内容

detach(): 使子线程与主线程独立运行、并行执行,不会阻塞主线程

头文件:

#include <thread>

#include <Windows.h>

存在线程互斥:

头文件:

#include <thread>

#include <Windows.h>

#include <mutex>

mutex mu; //线程互斥对象

mu.lock();//同步数据锁

mu.unlock();//解除锁定

https://blog.csdn.net/dcrmg/article/details/53912941

7、CDialog与CDialogEx

CDialogEx类是CDialog的扩展类,基类就是CDialog,具备基类全部功能,并根据新系统需要增加了一些界面美化的功能。
比如修改对话框的背景颜色,标题栏的颜色,标题栏的位图,标题栏字体的位置和颜色,包括激活和非激活状态,对话框边界的颜色,对话框字体等。

两个在基础功能上没什么区别,但因为版本不同,MFC向导生成的类模板差异较大。

https://www.cnblogs.com/MakeView660/p/8662336.html

8、GetScrollPos,是获取指定滚动条中滚动按钮的当前位置的一种函数

static_cast<int> 是类型强制转换。

afx_msg宏表示声明的是一个消息响应函数。

SetWindowPos():设置按钮或其他控件、窗口的位置。

函数原型:

BOOL SetWindowPos(HWND hWnd, HWND hWndInsertAfter,int X,int Y,int cx, int cy, UINT uFlags);

https://www.cnblogs.com/tmdsleep/p/9734812.html

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
<!DOCTYPE html> <html> <head> <title>STL Model Loading with Three.js</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script> <script src="https://threejs.org/examples/js/loaders/STLLoader.js"></script> </head> <body> <div id="container"></div> <script> var container, camera, scene, renderer, controls; init(); animate(); function init() { container = document.getElementById( 'container' ); // Camera camera = new THREE.PerspectiveCamera( 45, window.innerWidth / window.innerHeight, 0.1, 1000 ); camera.position.set( 0, 0, 10 ); // Scene scene = new THREE.Scene(); // Light var light = new THREE.PointLight( 0xffffff ); light.position.set( 10, 10, 10 ); scene.add( light ); // STL Loader var loader = new THREE.STLLoader(); loader.load( 'models/mechanical_arm.stl', function ( geometry ) { var material = new THREE.MeshPhongMaterial( { color: 0xAAAAAA } ); var mesh = new THREE.Mesh( geometry, material ); scene.add( mesh ); }); // Renderer renderer = new THREE.WebGLRenderer( { antialias: true } ); renderer.setPixelRatio( window.devicePixelRatio ); renderer.setSize( window.innerWidth, window.innerHeight ); container.appendChild( renderer.domElement ); // Controls controls = new THREE.OrbitControls( camera, renderer.domElement ); controls.enableDamping = true; controls.dampingFactor = 0.25; controls.screenSpacePanning = false; controls.minDistance = 0.1; controls.maxDistance = 100; // Axes var axesHelper = new THREE.AxesHelper( 5 ); scene.add( axesHelper ); } function animate() { requestAnimationFrame( animate ); renderer.render( scene, camera ); controls.update(); } </script> </body> </html>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值