20140401 cudaHOG代码
1、cudaHOG代码(删减没有必要的目录)
cudaHOGDetect需要boost库:boost_date_time-vc100-mt-1_40.lib
- VC++目录->附加库目录D:\boost\boost_1_40_0\stage\lib
- C\C++目录->常规->D:\boost\boost_1_40_0\include\boost-1_40\
2、STL基本
- 包含一些列排序搜索算法
- 调试安全、跨平台
- 模板:类的宏,也甜饼切割机(cookie cutter),泛型(generic).
- 类模板:泛型类。函数模板:泛型函数
- STL标准模板库:一些聪明人写的一系列模板。包括链表,堆栈,队列,列表和排序查找等常用的算法
- 容器:可容纳一些数据的模板类(分为顺序和关联)。STL中有vector,set,map,multiple,deque等容器
- 向量(vector):基本数组模板,这是一个容器
- 游标(Iterator):是一个指针,指向STL容器中的元素,也可以指向其他元素
3、vector向量例子
以下代码户主要是利用游标(iterator,类似于指针)和数组的形式去改变向量中元素的值
#include<iostream> #include<vector> using namespace std; void print(vector<int>); int main() { vector<int > vec; vec.push_back(34); vec.push_back(23); print(vec); vector<int>::iterator p; p=vec.begin(); *p=68; *(p+1)=69; //*(p+2)=70; print(vec); vec.push_back(101); vec.push_back(102); int i=0; while(i<vec.size()) cout<<vec[i++]<<" "; cout<<endl; vec[0]=1000; vec[1]=1001; vec[2]=1002; //vec[3]=1002; i=0; while(i<vec.size()) cout<<vec[i++]<<" "; print(vec); return 0; } void print(vector<int> v) { cout<<"\n vector size is: "<<v.size()<<endl; vector<int>::iterator p =v.begin(); }
以下代码主要是利用vector求和
- vector 的reserve增加了vector的capacity,但是它的size没有改变!而resize改变了vector的capacity同时也增加了它的size!
- vector<int>::iterator p2=v1[0];这两句都是错的,这就是与指针的区别http://www.cnblogs.com/qlee/archive/2011/05/16/2048026.html
vector<int>::iterator p2=&(v1[0]);这两句都是错的,这就是与指针的区别
#include<iostream> #include<vector> using namespace std; int sum(vector<int> vec) { int result =0; vector<int>::iterator p=vec.begin(); while(p!=vec.end()) result+=*p++; return result; } int main() { vector<int> v1(100); //定义一个包含一百个元素的向量,自动初始化为0 cout<<v1.size()<<endl; //100 cout<<sum(v1)<<endl; //0 v1.push_back (23); cout<<v1.size()<<endl; //101 cout<<sum(v1)<<endl; //23 v1.resize(1000); //v1.reserve(1000); v1[900]=900; cout<<v1[900]<<endl;//900 cout<<v1.front()<<endl;//0 cout<<v1.back()<<endl;//23 v1.pop_back(); cout<<v1.back()<<endl;//0 //vector<int>::iterator p2=v1[0];这两句都是错的 //vector<int>::iterator p2=&(v1[0]);这两句都是错的 return 0; }
以下代码是浅拷贝出错,导致两次析构同一块内存问题:深拷贝会开辟新的空间,浅拷贝不会
#include<iostream> #include<cstdlib>//cstdlib是C++里面的一个常用函数库, 等价于C中的<stdlib.h> #include<vector> using namespace std; class CDemo { public: CDemo():str(NULL){}; ~CDemo() { if(str) //delete[] str; { static int i=0; cout<<"&CDemo"<<i++<<"="<<(int *)this<<", str"<<(int *)str<<endl; delete[] str; } } char *str; }; int main(int argc, char ** argv) { CDemo dl; dl.str=new char[32]; strcpy(dl.str,"trend micro"); vector<CDemo> *al=new vector<CDemo>(); al->push_back(dl); delete al;//第一次释放 return EXIT_SUCCESS;//退出时第二次释放 }
解决方法是:在CDemo类中添加一个深拷贝构造函数
CDemo(const CDemo &cd) { this->str = new char[strlen(cd.str)+1]; strcpy(str,cd,str); }