- 浏览: 388745 次
- 性别:
- 来自: 杭州
最新评论
-
wsyzyrxp:
非常感谢 兄弟 帮了我大忙
[opengl]弹簧质点法模拟柔性布料以及椭球碰撞的opengl实现 -
mingdry0304:
[opengl]彩色立方体旋转 -
tyfengyu:
我刚刚更改的代码加上了标准差stdVal,故recoMat应该 ...
[python]用python实现的pca算法 -
tyfengyu:
python的pca代码有2处错误:1.finalData = ...
[python]用python实现的pca算法 -
暴风雪:
McFlurry 写道前排(凑字数)!擦你怎么摸来这里的
诈尸总结
文章列表
[CUDA]GPU设备属性的查询和使用
- 博客分类:
- cuda
要获得GPU设备的数量,在cuda中是通过cudaGetDeviceCount(int*)来实现的。
对于每个GPU设备。cuda使用cudaDeviceProp类型来保存设备信息。cudaDeviceProp的详细内容如下
我们通过cudaGetDeviceProperties(cudaDeviceProp* prop,int i)来获取第i块设备属性。具体参考代码如下
#include<cuda_runtime.h>
#include<windows.h>
#include<iostream>
using namespace std;
...
《Effective C艹》读书笔记(19)
- 博客分类:
- C艹
条款28:避免返回handles指向对象内部成分
先看代码
class data{
private:
int a;
public:
int& getA(){
return a;
}
data(int n):a(n){}
};
int main(){
data d(2);
d.getA() = 1;
cout<<d.getA()<<endl;
return 0;
}
理论上,作为私有变量a不应该在类外被修改,但是在这里,却通过getA成功 ...
《Effective C艹》读书笔记(18)
- 博客分类:
- C艹
条款26:尽可能延后变量定义式的出现时间
在使用某个变量之前再去定义这个变量,而不是很早就定义这个变量。这样做主要有两个好处。首先,程序员在阅读代码时可以立刻找到他的定义,而不是要翻阅代码寻找定义。也可以避免在前面定义了变量却在后面忘记使用的情况。另一个原因是可以节省资源。
另外书中提到了在循环中定义变量的问题。
for(int i = 0;i<10;i++){
num d(a);
//使用d
}
num d;
for(int i = 0;i<10;i++){
d = a;//使用d
} ...
条款24:若所有参数皆需类型转换,请为此采用non-member函数
看下面这段代码
class num{
public:
int data;
num(int a):data(a){}
num():data(0){}
const num operator*(num a)const{
num res;
res.data = this->data*a.data;
return res;
}
};
当我们这样调用操作符的时候
num b = a*2;
编译是正确 ...
《Effective C艹》读书笔记(16)
- 博客分类:
- C艹
条款23:宁以non-member、non-friend替换member函数
一般我们相当然以为类中的成员函数更具封装性,而实际上并不是那么一回事,因为成员函数不仅可以访问private成员变量,也可以取用private函数、enums、typedefs等等。而非成员非友元函数能实现更大的封装性,因为它只能访问public函数。
将所有便利函数放在多个头文件内但隶属同一个命名空间,意味客户可以轻松扩展这一组便利函数。需要做的就是添加更多non-member non-friend函数到此命名空间内。
请记住:
宁可拿non-member non-friend函数替 ...
《Effective C艹》读书笔记(15)
- 博客分类:
- C艹
条款22:将成员变量声明为private
作为学生党,经常在代码里把变量声明为public,在外部直接进行访问了事。这个条款告诉我们,这样做是非常不科学的。
1,private能够提供非常完善的权限控制,你可以直接控制一个变量是只读,还是可读可写,甚至是只写。而不是把使用这个类的各种权限全部公开。
2,private对数据进行了封装,减少了数据被外界访问的机会,方便了代码的维护。
class base{
public:
int data;
char* name;
};
试想有这样的一个类,其中的数据全部为public,那么 ...
《Effective C艹》读书笔记(14)
- 博客分类:
- C艹
条款21:当必须返回对象时,别妄想返回其reference
并不是在任何情况下都可以通过传引用的方式返回值。看下面这段代码
const Rational& operator* (const Rational& r1, const Rational& r2){
Rational temp;
temp.numerator = r1.numerator * r2.numerator;
temp.denominator = r1.denominator * r2.denominator;
...
《Effective C艹》读书笔记(13)
- 博客分类:
- C艹
条款20:宁以pass-by-reference-to-const替换pass-by-value
传递引用比起传递值的参数有一个明显的优势就是,传递引用并不会构造新的对象,从而避免了构造函数和析构函数的开销,提升函数效率。
传引用参数的时候,如果使用const引用,可以告诉接下来要使用函数的人,这个数据在函数中不会被改变。
pass-by-value还会造成对象切割的问题,下面一段代码
#include<iostream>
#include<cstring>
#include<cstring>
using na ...
《Effective C艹》读书笔记(12)
- 博客分类:
- C艹
条款十八:让接口容易被正确使用,不易被误用
如果我们设计一个日期类,可能会写成如下的模样
class Date{
public:
Date(int month, int day, int year);
…
};
这个构造函数貌似没有问题,但是她却无法阻止用户输入 ...
《Effective C艹》读书笔记(11)
- 博客分类:
- C艹
条款16:成对使用new和delete时要采取相同的形式
这个条款非常好理解。也就是说,当用new申请资源的时候,要用delete删除,当用new xxx = new XXX[]形式申请资源的时候,要用delete[]删除。
但有时候我们会写出下述的代码
typedef string AddressLines[4];
string *pal = new AddressLines;
当我们要删除数据的时候第一反应可能是delete而不是delete[]!所以说为了避免此类错误,应该尽量避免对数组进行typedef操作。
条款17:以独立语句将new ...
《Effective C艹》读书笔记(10)
- 博客分类:
- C艹
条款14:在资源管理类中小心copy行为
修改了一下书中代码(参考http://www.cnblogs.com/jerry19880126/archive/2013/05/25/3098997.html)
#include<iostream>
#include<cstring>
#include<cstdio>
#include<memory>
using namespace std;
class Lock { ...
《Effective C艹》读书笔记(9)
- 博客分类:
- C艹
条款13:以对象管理资源
这一个条款主要介绍了auto_ptr 和 shared_ptr。这是c++的两种智能指针类型。
对于一般在堆上分配的指针,我们需要在程序退出之前对其进行delete,否则就会造成内存泄漏。
base* ba = new base();
delete ba;
然而我们并不能保证每次都能正常的将生成在堆内的对象给删除,这时候就需要智能指针了。
智能指针的好处在于,每次程序退出时都会自动的将指向的对象删除,避免了内存泄漏。
智能指针的定义方法如下
auto_ptr&l ...
《Effective C艹》读书笔记(8)
- 博客分类:
- C艹
条款12:复制对象时勿忘其每一个成分
对于一个简单的类的拷贝函数,我们可以这样写
class base{
public:
int data;
base& operator=(const base& a){
this->data = a.data;
return *this;
}
};
拷贝构造函数的情况和赋值拷贝情况类似。如果这时,我们要改变这个类,增加一个double b,但是没有修改赋值函数的话,进行赋值就会把新添加的变量遗漏掉!所以说,当对类进行修改之后,不要忘记更新 ...
《Effective C艹》读书笔记(7)
- 博客分类:
- C艹
条款11:在operator= 中处理自我赋值
一个包含指针变量的类,我们在为其写赋值函数(深复制)的时候可能会这样写
class base{
public:
int data;
double* p;
base& operator=(const base& a){
this->data = a.data;
...
《Effective C艹》读书笔记(6)
- 博客分类:
- C艹
条款09:绝不在构造和析构过程中调用virtual函数
首先看下面一段代码,我们将在基类的构造函数中调用虚函数
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
class base{
public:
base(){
fun();
}
virtual void fun(){
cout<<"base class - fun\n";
} ...