C++中 类成员函数声明中,vector成员的初始化方式问题

定义一个类,类中有一个vector成员,初始化的时候发现了一个问题理解不了
初始化报错
使用这种初始化方式报错
初始化报错
使用这种初始化方式也报错
初始化正确
只有这种初始化方式正确
为什么第三张图片里的初始化方式可以,第一张、第二张的初始化方式报错

c++

1个回答

第一张,第二张定义时用的是小括号( )。
编译器会认为你尝试定义一个函数。

对类的成员函数而言,除了在类体中声明外,还需要在类体外定义。(inline方式在类体中定义亦可)。

第三张是初始化列表的方式在构造函数定义时给成员变量赋值,是可以的。

如果有帮助,请采纳答案好吗,谢谢!

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C++中 类成员函数声明中,vector成员的初始化方式问题
定义一个类,类中有一个vector<double>成员,初始化的时候发现了一个问题理解不了 ![初始化报错](https://img-ask.csdn.net/upload/201707/02/1498983894_308029.png) 使用这种初始化方式报错 ![初始化报错](https://img-ask.csdn.net/upload/201707/02/1498983908_688020.png) 使用这种初始化方式也报错 ![初始化正确](https://img-ask.csdn.net/upload/201707/02/1498983921_481758.png) 只有这种初始化方式正确 为什么第三张图片里的初始化方式可以,第一张、第二张的初始化方式报错
关于C++中 unordered_map 中类成员的初始化
``` #include <iostream> #include <vector> #include <unordered_map> using namespace std; class Testclass{ public: explicit Testclass(); private: std::unordered_map<std::vector<int>, int> world; }; Testclass::Testclass() { std::vector<int> temp(5); world = {{temp,0}}; } int main() { Testclass testclass(); return 0; } ``` 运行这段代码之后会报错,提示说implicit instantiation of undefined template 'std::__1::hash<std::__1::vector<int, std::__1::allocator<int> > >' : public integral_constant<bool, __is_empty(_Tp)> {}; 我觉得可能是构造函数中类成员变量member初始化的过程中出现了一些问题。求各位大神解答一下
C++ 中想要实现 装有子类对象的容器去初始化一个装父类对象的容器
比如说: ```vector<derived_class> vec1; ```vector<base_class> vec2 = vec1; 写代码过程中想要将装有不同子类的很多容器都传参到一个 函数(包含一个装有父类容器的形参)中做一些基本操作,想 通过这样的方式减少重复写多个相似函数 还是说我这样必须通过模板实现,可以给一些提示么
c++技术帮,给个程序的思路
编写一个实现n维向量各种操作的类(Vector),功能包括: 1. 构造函数实现n维向量的初始化构造,这里n可变; 2. 析构函数实现向量动态内存的释放; 3. 拷贝构造函数和移动拷贝构造函数实现向量的拷贝构造; 4. 重载赋值运算符('=')和移动赋值运算符,实现两个向量之间的赋值; 5. 编写成员函数求两个向量的内积; 6. 编写成员函数求两个向量的外积; 7. 编写成员函数求两个向量的和; 8. 编写成员函数求两个向量的差; 9. 编写成员函数实现向量单位化; 10. 编写一个主函数测试向量类的上述功能。 在向量类的基础上,编写矩阵类(Matrix),功能包括:实现矩阵的一些常用运算:取一行、子块、求行列式值(detMatrix)、数乘(ScalarMult);还对矩阵运算的操作符进行了重载:+(operator+)、-(operator-)等。并用主函数测试该矩阵类。 Matrix operator[](int); //取某行,对操作符[]重载 Matrix operator()(int, int, int, int); //取子块,对操作符()重载
stm8超声波测距为什么测的距离一直没有改变
#include <iostm8s103f3.h> #define uint unsigned int #define uchar unsigned char #define ulong unsigned long #define Echo PC_IDR_IDR6 #define Trig PC_ODR_ODR5 float distance; void delay_ms(uint ms) //延时函数{ uint i,j; for(i=0;i<ms;i++) for(j=0;j<3164;j++); } void IO() //IO初始化 { PB_DDR_DDR5=0; //PB4配置为输入 PB_CR1_C15=1; //PB4为上拉电阻输入 PB_CR2_C25=0; PC_DDR_DDR6=0; PC_CR1_C16=1; PC_CR1_C16=0; } void uart1_init(void) //串口初始化 { UART1_CR1=0x00; UART1_CR2=0x00; UART1_CR3=0x00; UART1_BRR2 = 0x03; UART1_BRR1 = 0x68; //9600波特率 UART1_CR2_TEN = 1; //允许发送 UART1_CR2_REN = 1; //允许接收 UART1_CR2_RIEN = 1; //接收中断使能 } void uart1_send(uchar dat) //串口发送{ while((UART1_SR & 0x80)==0x00); UART1_DR = dat; } void timer_Init(void) { TIM1_PSCRH = 0; TIM1_PSCRL = 15; //(15+1)分频为1M TIM1_ARRH = 0x0; TIM1_ARRL = 0x32; //每50us中断一次 TIM1_CCMR1_OC1M = 6; //pwm模式2 TIM1_CCER1_CC1E = 1; //CC1引脚使能 TIM1_CCR1H = 0; TIM1_CCR1L = 0; //默认输出低 TIM1_BKR |= 0x80; //设置刹车寄存器 TIM1_IER = 0x01; //允许更新中断 TIM1_CR1 = 0x01; //计数器使能,开始计数} /****千位数上的每一位数的读取*****/void uart1_int(uint distance) { char bai,shi,ge; bai=distance%100; shi=distance/10%10; ge=distance%10; uart1_send(bai+48); uart1_send(shi+48); //0x30对应的字符是‘0‘,数字加上0X30后为数字所对应的Ascall码 uart1_send(ge+48); uart1_send(0x0a); //0X0a对应的字符是换行\n} /*********** 定时器计数 ***********/void calc(){ //0..034cm/us int t=0; t=TIM1_CCR1H*256+TIM1_CCR1L; distance=t*0.017; TIM1_CCR1H = 0; TIM1_CCR1L = 0; uart1_int(distance); } void Trigger() { Trig=1; TIM1_ARRH = 0x0; TIM1_ARRL = 0x32; Trig=0;} void main(void){ CLK_CKDIVR &=0xe7; //配置时钟为16MHz asm("sim"); //关总中断 IO(); //IO uart1_init(); timer_Init(); asm("rim"); //开总中断 while(1) { Trigger(); //发送触发信号 while(Echo) TIM1_CR1 = 0x01; //启动定时器 while(!Echo) TIM1_CR1 = 0x00; //关闭定时器 calc(); //计算 uart1_send(0x0a); }}#pragma vector = UART1_R_RXNE_vector__interrupt void uart1rxd(void){ UART1_SR_RXNE = 0; //data = UART1_DR;} #pragma vector = TIM1_OVR_UIF_vector__interrupt void TIM1_OVR_UIF(void){ TIM1_SR1_UIF = 0; //add your code here}
【初学者跪地求助】一个关于类中vector类型调用的问题。
一个项目管理的程序,现在在写输出项目中任务列表的功能。 getTaskList()函数中似乎总是无法调用project类中的 任务列表vector 程序运行就会崩溃 C++初学者求帮助啊! 数据已经由initData()函数初始化 有两个包含任务列表的容器 还有一个包含项目列表的容器 #include<iostream> #include<vector> #include<string> using namespace std; class Time { public: Time() { hour = 0; minute = 0; sec = 0; } void set_time(int h,int m,int s); void show_time(); private: int hour; int minute; int sec; }; void Time::set_time(int h,int m,int s) { hour=h; minute=m; sec=s; } void Time::show_time() { cout << hour << ":" << minute << ":" << sec << endl; } class task{ protected: string id,releaserId; Time releaseTime; int type; bool state; string title; Time finishTime; public: task(string i,string r,Time re,int t,bool s,string ti,string f,Time fi); void showTaskInfo(); string finisherId; }; task::task(string i,string r,Time re,int t,bool s,string ti,string f,Time fi){ id=i; releaserId=r; releaseTime=re; type=t; state=s; title=ti; finisherId=f; finishTime=fi; } void task::showTaskInfo(){ cout<<"ID:"<<id<<endl; cout<<"发布者ID:"<<releaserId<<endl; cout<<"创建时间:"; releaseTime.show_time(); cout<<"任务类型:"; if(type==0){ cout<<"普通任务"<<endl; } else if(type==1){ cout<<"私密任务"<<endl; } else if(type==2){ cout<<"指派任务"<<endl; } cout<<"任务状态:"; if(state==0){ cout<<"已发布"<<endl; } else{ cout<<"已完成"<<endl; } cout<<"题目:"<<title<<endl; if(state==1){ cout<<"完成者ID:"<<finisherId<<endl; cout<<"完成时间:";finishTime.show_time(); } } class proj{ protected: string id,releaserId; Time releaseTime; vector<task> vecTaskList; string title; public: proj(string,string,Time,vector<task>,string); void getTaskList(); }; proj::proj(string i,string r,Time t,vector<task> v,string ti){ id=i; releaserId=r; releaseTime=t; vecTaskList=v; title=ti; } void proj::getTaskList(){ /* for(int i=0;i<vecTaskList.size();i++){ vecTaskList[i].showTaskInfo(); } */ cout<<vecTaskList[0].finisherId; cout<<"00000"; } vector<task> vecProj1; vector<task> vecProj2; vector<proj> vecProj; void initData(){ Time time1,time2,time3,time4,time5,time6; time1.set_time(8,36,53); time2.set_time(9,32,40); time3.set_time(12,38,56); time4.set_time(11,12,23); time5.set_time(12,06,10); time6.set_time(00,00,00); task task1("001","Eacials",time1,0,0,"A","NULL",time6); task task2("002","Eacials",time1,1,1,"B","Anne",time3); task task3("003","Eacials",time1,2,0,"C","NULL",time6); task task4("004","hs",time2,0,1,"D","Ben",time4); task task5("005","hs",time2,1,0,"E","NULL",time6); task task6("006","hs",time2,2,1,"F","Justin",time5); proj proj1("001","Eacials",time1,vecProj1,"IMP"); proj proj2("002","hs",time2,vecProj2,"NEC"); vecProj1.push_back(task1); vecProj1.push_back(task2); vecProj1.push_back(task3); vecProj2.push_back(task4); vecProj2.push_back(task5); vecProj2.push_back(task6); vecProj.push_back(proj1); vecProj.push_back(proj2); proj1.getTaskList(); } main(){ initData(); vecProj[0].getTaskList(); system("pause"); return 0; }
C++初学者上机的一个实验题,不出结果,大神们指教一下(VC++6.0编译器)
/*依据下面的描述定义并实现一个向量类Vector,并在main函数中定义所需要的对象验证所实现代码的正确性 1) 私有数据成员int dimension; double* data; 表示向量的维数与向量元素存储空间的首地址 2) 无参构造函数,实现把向量所有元素初始化为0 3) 有参构造函数,实现用一个n维数组初始化n维向量 4) 拷贝构造函数 5) 析构函数 6) 输出数据成员函数 void display( ); 7) 成员函数int GetDimension();获取向量对象的维数 8) 成员函数 double SetAt(double newdata,int index);实现给向量的第index+1个元素赋值 9) 成员函数 double GetAt(int index);实现读取向量的第index+1个元素的值 10)实现向量加、减、乘运算的成员函数 Vector Add(const Vector &ob2 ); Vector Sub(const Vector &ob2 ); int Mult(const Vector &ob2 ); */ #include <iostream.h> class Vector { private: int dimension; double* data; public: Vector(); Vector(int a[]); Vector(const Vector &v); ~Vector(); void Display(); int GetDimension(); double SetAt(double newdata,int index); double GetAt(int index); Vector Add(const Vector &ob2 ); Vector Sub(const Vector &ob2 ); int Mult(const Vector &ob2 ); }; Vector::Vector()//无参构造函数,实现把向量所有元素初始化为0 { dimension=4; for(int i=0;i<4;i++) data[i]=0; } Vector::Vector(int a[])//有参构造函数,实现用一个n维数组初始化n维向量 { dimension=sizeof(a); int i; for(i=0;i<dimension;i++) data[i]=a[i]; } Vector::Vector(const Vector &v)//拷贝构造函数 { dimension=v.dimension; for(int i=0;i<v.dimension;i++) data[i]=v.data[i]; } Vector::~Vector()//析构函数 {} void Vector::Display()//输出数据成员函数 { cout<<'('; for(int i=0;i<dimension;i++) cout<<data[i]<<','; cout<<')'; } int Vector::GetDimension()//获取向量对象的维数 { return sizeof(data); } double Vector::SetAt(double newdata,int index)//实现给向量的第index+1个元素赋值 { data[index]=newdata; return 0; } double Vector::GetAt(int index)//实现读取向量的第index+1个元素的值 { return data[index]; } Vector Vector::Add(const Vector &ob2)//实现向量加、减、乘运算的成员函数 { Vector temp; temp.dimension=dimension; for(int i;i<dimension;i++) temp.data[i]=data[i]+ob2.data[i]; return temp; } Vector Vector::Sub(const Vector &ob2) { Vector temp; temp.dimension=dimension; for(int i;i<dimension;i++) temp.data[i]=data[i]-ob2.data[i]; return temp; } int Vector::Mult(const Vector &ob2) { int i; double sum=0; for(i=0;i<dimension;i++) sum+=data[i]*ob2.data[i]; return int(sum); } int main() { Vector v1; double data=0; int a[4]={1,2,3,4}; Vector v2(a); Vector v3(v2); Vector v4,v5; cout<<"lv1:"<<v1.GetDimension()<<endl; v1.Display(); cout<<"lv2:"<<v2.GetDimension()<<endl; v2.Display(); cout<<"lv3:"<<v3.GetDimension()<<endl; v3.Display(); v1.SetAt(3,2); v1.Display(); cout<<v1.GetAt(2)<<endl; v1.Display(); v4=v1.Add(v2); cout<<"v1+v2="<<endl; v4.Display(); v5=v1.Sub(v2); cout<<"v1-v2="<<endl; v5.Display(); int sum; sum=v1.Mult(v2); cout<<"v1*v2="<<sum; return 0; }
cocos2d-x v3.10在vs2012中编译出错
我从cocos官网下载了最新的cocos2d-x V3.10版本,本地解压后,打开build文件夹下的相应的win32的sln解决文件后, 在vs2012(中文旗舰版)中,编译出错了,望各路大神不吝赐教,感激不尽!!!(我电脑的os是win7的) ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓Log如下↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 1>------ 已启动生成: 项目: libcocos2d, 配置: Debug Win32 ------ 1>项目文件包含 ToolsVersion="12.0"。此工具集可能未知或缺失。在这种情况下,通过安装 MSBuild 的正确版本,或许可以解决此问题。否则,该 build 可能已因策略原因而被强制为某个特定 ToolsVersion。将该项目视为其已具有 ToolsVersion="4.0"。有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=291333。 1>项目文件包含 ToolsVersion="12.0"。此工具集可能未知或缺失。在这种情况下,通过安装 MSBuild 的正确版本,或许可以解决此问题。否则,该 build 可能已因策略原因而被强制为某个特定 ToolsVersion。将该项目视为其已具有 ToolsVersion="4.0"。有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=291333。 1>项目文件包含 ToolsVersion="12.0"。此工具集可能未知或缺失。在这种情况下,通过安装 MSBuild 的正确版本,或许可以解决此问题。否则,该 build 可能已因策略原因而被强制为某个特定 ToolsVersion。将该项目视为其已具有 ToolsVersion="4.0"。有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=291333。 1>项目文件包含 ToolsVersion="12.0"。此工具集可能未知或缺失。在这种情况下,通过安装 MSBuild 的正确版本,或许可以解决此问题。否则,该 build 可能已因策略原因而被强制为某个特定 ToolsVersion。将该项目视为其已具有 ToolsVersion="4.0"。有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=291333。 1> UIScale9Sprite.cpp 1>..\ui\UIScale9Sprite.cpp(1172): error C2059: 语法错误:“{” 1>..\ui\UIScale9Sprite.cpp(1172): error C2143: 语法错误 : 缺少“;”(在“{”的前面) 1>..\ui\UIScale9Sprite.cpp(1172): error C2143: 语法错误 : 缺少“;”(在“}”的前面) 1>..\ui\UIScale9Sprite.cpp(1176): error C2059: 语法错误:“{” 1>..\ui\UIScale9Sprite.cpp(1176): error C2143: 语法错误 : 缺少“;”(在“{”的前面) 1>..\ui\UIScale9Sprite.cpp(1176): error C2143: 语法错误 : 缺少“;”(在“}”的前面) 1>..\ui\UIScale9Sprite.cpp(1210): error C2059: 语法错误:“{” 1>..\ui\UIScale9Sprite.cpp(1210): error C2143: 语法错误 : 缺少“;”(在“{”的前面) 1>..\ui\UIScale9Sprite.cpp(1210): error C2143: 语法错误 : 缺少“;”(在“}”的前面) 1>..\ui\UIScale9Sprite.cpp(1299): error C2059: 语法错误:“{” 1>..\ui\UIScale9Sprite.cpp(1299): error C2143: 语法错误 : 缺少“;”(在“{”的前面) 1>..\ui\UIScale9Sprite.cpp(1299): error C2143: 语法错误 : 缺少“;”(在“}”的前面) 2>------ 已启动生成: 项目: cpp-tests, 配置: Debug Win32 ------ 2> 复制了 0 个文件 2> 找不到文件 - *.dll 2> 复制了 0 个文件 2> LabelTestNew.cpp 2> NavMeshTest.cpp 2> UIScale9SpriteTest.cpp 2> controller.cpp 2>C:\cocos2d-x-3.10\external\chipmunk\include\chipmunk\chipmunk.h(26): warning C4005: “_USE_MATH_DEFINES”: 宏重定义 (..\Classes\controller.cpp) 2> 命令行参数: 参见前面的“_USE_MATH_DEFINES”定义 2>..\Classes\UITest\CocoStudioGUITest\UIScale9SpriteTest.cpp(989): error C2552: “spriteFrameNameArray”: 不能用初始值设定项列表初始化非聚合 2> “std::vector<_Ty>”: 不聚合带基的类型 2> with 2> [ 2> _Ty=std::string 2> ] 2> DrawPrimitivesTest.cpp 2>c:\cocos2d-x-3.10\tests\cpp-tests\classes\ActionManagerTest/ActionManagerTest.h(92): error C2864: “StopActionsByFlagsTest::kMoveFlag”: 只有静态常量整型数据成员才可以在类中初始化 (..\Classes\controller.cpp) 2>c:\cocos2d-x-3.10\tests\cpp-tests\classes\ActionManagerTest/ActionManagerTest.h(93): error C2864: “StopActionsByFlagsTest::kScaleFlag”: 只有静态常量整型数据成员才可以在类中初始化 (..\Classes\controller.cpp) 2>c:\cocos2d-x-3.10\tests\cpp-tests\classes\ActionManagerTest/ActionManagerTest.h(94): error C2864: “StopActionsByFlagsTest::kRotateFlag”: 只有静态常量整型数据成员才可以在类中初始化 (..\Classes\controller.cpp) 2>c:\cocos2d-x-3.10\tests\cpp-tests\classes\ActionManagerTest/ActionManagerTest.h(95): error C2864: “StopActionsByFlagsTest::kRepeatForeverFlag”: 只有静态常量整型数据成员才可以在类中初始化 (..\Classes\controller.cpp) 2>c:\cocos2d-x-3.10\tests\cpp-tests\classes\ActionManagerTest/ActionManagerTest.h(86): error C2512: “StopActionsByFlagsTest”: 没有合适的默认构造函数可用 (..\Classes\controller.cpp) 2>..\Classes\LabelTest\LabelTestNew.cpp(1027): warning C4018: “<”: 有符号/无符号不匹配 2>c:\cocos2d-x-3.10\external\bullet\bulletcollision\broadphasecollision\btDbvtBroadphase.h(62): warning C4099: “btDbvtBroadphase”: 类型名称以前使用“class”现在使用的是“struct” (..\Classes\NavMeshTest\NavMeshTest.cpp) 2> c:\cocos2d-x-3.10\cocos\physics3d\CCPhysics3DWorld.h(39) : 参见“btDbvtBroadphase”的声明 2>..\Classes\LabelTest\LabelTestNew.cpp(1841): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 2>..\Classes\LabelTest\LabelTestNew.cpp(2524): error C2552: “labelTypes”: 不能用初始值设定项列表初始化非聚合 2> “std::vector<_Ty>”: 不聚合带基的类型 2> with 2> [ 2> _Ty=std::string 2> ] 2>..\Classes\NavMeshTest\NavMeshTest.cpp(181): error C2143: 语法错误 : 缺少“;”(在“{”的前面) 2>..\Classes\NavMeshTest\NavMeshTest.cpp(181): error C2143: 语法错误 : 缺少“;”(在“}”的前面) 2>..\Classes\LabelTest\LabelTestNew.cpp(2665): error C2552: “labelTypes”: 不能用初始值设定项列表初始化非聚合 2> “std::vector<_Ty>”: 不聚合带基的类型 2> with 2> [ 2> _Ty=std::string 2> ] 2> ActionManagerTest.cpp 2>..\Classes\DrawPrimitivesTest\DrawPrimitivesTest.cpp(317): error C2552: “cocos2d::V3F_C4B_T2F::vertices”: 不能用初始值设定项列表初始化非聚合 2> “cocos2d::Vec3”: 不聚合带用户定义的构造函数的类型 2>..\Classes\DrawPrimitivesTest\DrawPrimitivesTest.cpp(318): error C2552: “cocos2d::V3F_C4B_T2F::vertices”: 不能用初始值设定项列表初始化非聚合 2> “cocos2d::Vec3”: 不聚合带用户定义的构造函数的类型 2>..\Classes\DrawPrimitivesTest\DrawPrimitivesTest.cpp(319): error C2552: “cocos2d::V3F_C4B_T2F::vertices”: 不能用初始值设定项列表初始化非聚合 2> “cocos2d::Vec3”: 不聚合带用户定义的构造函数的类型 2>..\Classes\DrawPrimitivesTest\DrawPrimitivesTest.cpp(320): error C2552: “cocos2d::V3F_C4B_T2F::vertices”: 不能用初始值设定项列表初始化非聚合 2> “cocos2d::Vec3”: 不聚合带用户定义的构造函数的类型 2>c:\cocos2d-x-3.10\tests\cpp-tests\classes\actionmanagertest\ActionManagerTest.h(92): error C2864: “StopActionsByFlagsTest::kMoveFlag”: 只有静态常量整型数据成员才可以在类中初始化 (..\Classes\ActionManagerTest\ActionManagerTest.cpp) 2>c:\cocos2d-x-3.10\tests\cpp-tests\classes\actionmanagertest\ActionManagerTest.h(93): error C2864: “StopActionsByFlagsTest::kScaleFlag”: 只有静态常量整型数据成员才可以在类中初始化 (..\Classes\ActionManagerTest\ActionManagerTest.cpp) 2>c:\cocos2d-x-3.10\tests\cpp-tests\classes\actionmanagertest\ActionManagerTest.h(94): error C2864: “StopActionsByFlagsTest::kRotateFlag”: 只有静态常量整型数据成员才可以在类中初始化 (..\Classes\ActionManagerTest\ActionManagerTest.cpp) 2>c:\cocos2d-x-3.10\tests\cpp-tests\classes\actionmanagertest\ActionManagerTest.h(95): error C2864: “StopActionsByFlagsTest::kRepeatForeverFlag”: 只有静态常量整型数据成员才可以在类中初始化 (..\Classes\ActionManagerTest\ActionManagerTest.cpp) 2>c:\cocos2d-x-3.10\tests\cpp-tests\classes\actionmanagertest\ActionManagerTest.h(86): error C2512: “StopActionsByFlagsTest”: 没有合适的默认构造函数可用 (..\Classes\ActionManagerTest\ActionManagerTest.cpp) ========== 生成: 成功 0 个,失败 2 个,最新 4 个,跳过 0 个 ==========
想用树莓派做行人识别,不知道可以吗
先在树莓派上装c++版的opencv,用板子上的csi摄像头采集图像,然后用HOG特征和SVM来检测其中的行人。不知道树莓派算力够吗? 想把这个程序写进去。 ``` #include <iostream> #include <fstream> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/objdetect/objdetect.hpp> #include <opencv2/ml/ml.hpp> using namespace std; using namespace cv; #define PosSamNO 1114 //正样本个数 #define NegSamNO 12180 //负样本个数 #define TRAIN true//是否进行训练,true表示重新训练,false表示读取xml文件中的SVM模型 #define CENTRAL_CROP false //true:训练时,对96*160的INRIA正样本图片剪裁出中间的64*128大小人体 //HardExample:负样本个数。如果HardExampleNO大于0,表示处理完初始负样本集后,继续处理HardExample负样本集。 //不使用HardExample时必须设置为0,因为特征向量矩阵和特征类别矩阵的维数初始化时用到这个值 #define HardExampleNO 433 //继承自CvSVM的类,因为生成setSVMDetector()中用到的检测子参数时,需要用到训练好的SVM的decision_func参数, //但通过查看CvSVM源码可知decision_func参数是protected类型变量,无法直接访问到,只能继承之后通过函数访问 class MySVM : public CvSVM { public: //获得SVM的决策函数中的alpha数组 double * get_alpha_vector() { return this->decision_func->alpha; } //获得SVM的决策函数中的rho参数,即偏移量 float get_rho() { return this->decision_func->rho; } }; int main() { //检测窗口(64,128),块尺寸(16,16),块步长(8,8),cell尺寸(8,8),直方图bin个数9 HOGDescriptor hog(Size(64,128),Size(16,16),Size(8,8),Size(8,8),9);//HOG检测器,用来计算HOG描述子的 int DescriptorDim;//HOG描述子的维数,由图片大小、检测窗口大小、块大小、细胞单元中直方图bin个数决定 MySVM svm;//SVM分类器 //若TRAIN为true,重新训练分类器 if(TRAIN) { string ImgName;//图片名(绝对路径) ifstream finPos("d:/hogmit/pos/pos.txt");//正样本图片的文件名列表 //ifstream finPos("PersonFromVOC2012List.txt");//正样本图片的文件名列表 ifstream finNeg("d:/hogmit/neg/neg.txt");//负样本图片的文件名列表 Mat sampleFeatureMat;//所有训练样本的特征向量组成的矩阵,行数等于所有样本的个数,列数等于HOG描述子维数 Mat sampleLabelMat;//训练样本的类别向量,行数等于所有样本的个数,列数等于1;1表示有人,-1表示无人 //依次读取正样本图片,生成HOG描述子 for(int num=0; num<PosSamNO && getline(finPos,ImgName); num++) { cout<<"处理:"<<ImgName<<endl; //ImgName = "D:\\DataSet\\PersonFromVOC2012\\" + ImgName;//加上正样本的路径名 ImgName = "d:/hogmit/pos/" + ImgName;//加上正样本的路径名 Mat src = imread(ImgName);//读取图片 if(CENTRAL_CROP) src = src(Rect(16,16,64,128));//将96*160的INRIA正样本图片剪裁为64*128,即剪去上下左右各16个像素 //resize(src,src,Size(64,128)); vector<float> descriptors;//HOG描述子向量 hog.compute(src,descriptors,Size(8,8));//计算HOG描述子,检测窗口移动步长(8,8) // cout<<"描述子维数:"<<descriptors.size()<<endl; //处理第一个样本时初始化特征向量矩阵和类别矩阵,因为只有知道了特征向量的维数才能初始化特征向量矩阵 if( 0 == num ) { DescriptorDim = descriptors.size();//HOG描述子的维数 //初始化所有训练样本的特征向量组成的矩阵,行数等于所有样本的个数,列数等于HOG描述子维数sampleFeatureMat sampleFeatureMat = Mat::zeros(PosSamNO+NegSamNO+HardExampleNO, DescriptorDim, CV_32FC1); //初始化训练样本的类别向量,行数等于所有样本的个数,列数等于1;1表示有人,0表示无人 sampleLabelMat = Mat::zeros(PosSamNO+NegSamNO+HardExampleNO, 1, CV_32FC1); } //将计算好的HOG描述子复制到样本特征矩阵sampleFeatureMat for(int i=0; i<DescriptorDim; i++) sampleFeatureMat.at<float>(num,i) = descriptors[i];//第num个样本的特征向量中的第i个元素 sampleLabelMat.at<float>(num,0) = 1;//正样本类别为1,有人 } //依次读取负样本图片,生成HOG描述子 for(int num=0; num<NegSamNO && getline(finNeg,ImgName); num++) { cout<<"处理:"<<ImgName<<endl; ImgName = "d:/hogmit/neg/" + ImgName;//加上负样本的路径名 Mat src = imread(ImgName);//读取图片 //resize(src,img,Size(64,128)); vector<float> descriptors;//HOG描述子向量 hog.compute(src,descriptors,Size(8,8));//计算HOG描述子,检测窗口移动步长(8,8) //cout<<"描述子维数:"<<descriptors.size()<<endl; //将计算好的HOG描述子复制到样本特征矩阵sampleFeatureMat for(int i=0; i<DescriptorDim; i++) sampleFeatureMat.at<float>(num+PosSamNO,i) = descriptors[i];//第PosSamNO+num个样本的特征向量中的第i个元素 sampleLabelMat.at<float>(num+PosSamNO,0) = -1;//负样本类别为-1,无人 } //处理HardExample负样本 if(HardExampleNO > 0) { ifstream finHardExample("d:/hogmit/hard/hard.txt");//HardExample负样本的文件名列表 //依次读取HardExample负样本图片,生成HOG描述子 for(int num=0; num<HardExampleNO && getline(finHardExample,ImgName); num++) { cout<<"处理:"<<ImgName<<endl; ImgName = "d:/hogmit/hard/" + ImgName;//加上HardExample负样本的路径名 Mat src = imread(ImgName);//读取图片 //resize(src,img,Size(64,128)); vector<float> descriptors;//HOG描述子向量 hog.compute(src,descriptors,Size(8,8));//计算HOG描述子,检测窗口移动步长(8,8) //cout<<"描述子维数:"<<descriptors.size()<<endl; //将计算好的HOG描述子复制到样本特征矩阵sampleFeatureMat for(int i=0; i<DescriptorDim; i++) sampleFeatureMat.at<float>(num+PosSamNO+NegSamNO,i) = descriptors[i];//第PosSamNO+num个样本的特征向量中的第i个元素 sampleLabelMat.at<float>(num+PosSamNO+NegSamNO,0) = -1;//负样本类别为-1,无人 } } //输出样本的HOG特征向量矩阵到文件 ofstream fout("d:/xlw/SampleFeatureMat.txt"); for(int i=0; i<PosSamNO+NegSamNO; i++) { fout<<i<<endl; for(int j=0; j<DescriptorDim; j++) { fout<<sampleFeatureMat.at<float>(i,j)<<" "; } fout<<endl; } //训练SVM分类器 //迭代终止条件,当迭代满1000次或误差小于FLT_EPSILON时停止迭代 CvTermCriteria criteria = cvTermCriteria(CV_TERMCRIT_ITER+CV_TERMCRIT_EPS, 1000, FLT_EPSILON); //SVM参数:SVM类型为C_SVC;线性核函数;松弛因子C=0.01 CvSVMParams param(CvSVM::C_SVC, CvSVM::LINEAR, 0, 1, 0, 0.01, 0, 0, 0, criteria); cout<<"开始训练SVM分类器"<<endl; double time0=static_cast<double>(getTickCount()); svm.train(sampleFeatureMat,sampleLabelMat, Mat(), Mat(), param);//训练分类器 time0=((double)getTickCount()-time0)/getTickFrequency(); cout<<"训练完成"<<endl; cout<<"训练花费时间:"<<time0<<endl; svm.save("d:/xlw/SVM_HOG_mit_inria(1114pos+12180neg+433hard).xml");//将训练好的SVM模型保存为xml文件 } else //若TRAIN为false,从XML文件读取训练好的分类器 { cout<<"fail train"<<endl; //svm.load("SVM_HOG_2400PosINRIA_12000Neg_HardExample(误报少了漏检多了).xml");//从XML文件读取训练好的SVM模型 svm.load("d:/LBP/SVM_Model.xml"); } /************************************************************************************************* 线性SVM训练完成后得到的XML文件里面,有一个数组,叫做support vector,还有一个数组,叫做alpha,有一个浮点数,叫做rho; 将alpha矩阵同support vector相乘,注意,alpha*supportVector,将得到一个列向量。之后,再该列向量的最后添加一个元素rho。 如此,变得到了一个分类器,利用该分类器,直接替换opencv中行人检测默认的那个分类器(cv::HOGDescriptor::setSVMDetector()), 就可以利用你的训练样本训练出来的分类器进行行人检测了。 ***************************************************************************************************/ DescriptorDim = svm.get_var_count();//特征向量的维数,即HOG描述子的维数 int supportVectorNum = svm.get_support_vector_count();//支持向量的个数 cout<<"支持向量个数:"<<supportVectorNum<<endl; Mat alphaMat = Mat::zeros(1, supportVectorNum, CV_32FC1);//alpha向量,长度等于支持向量个数 Mat supportVectorMat = Mat::zeros(supportVectorNum, DescriptorDim, CV_32FC1);//支持向量矩阵 Mat resultMat = Mat::zeros(1, DescriptorDim, CV_32FC1);//alpha向量乘以支持向量矩阵的结果 //将支持向量的数据复制到supportVectorMat矩阵中 for(int i=0; i<supportVectorNum; i++) { const float * pSVData = svm.get_support_vector(i);//返回第i个支持向量的数据指针 for(int j=0; j<DescriptorDim; j++) { //cout<<pData[j]<<" "; supportVectorMat.at<float>(i,j) = pSVData[j]; } } //将alpha向量的数据复制到alphaMat中 double * pAlphaData = svm.get_alpha_vector();//返回SVM的决策函数中的alpha向量 for(int i=0; i<supportVectorNum; i++) { alphaMat.at<float>(0,i) = pAlphaData[i]; } //计算-(alphaMat * supportVectorMat),结果放到resultMat中 //gemm(alphaMat, supportVectorMat, -1, 0, 1, resultMat);//不知道为什么加负号? resultMat = -1 * alphaMat * supportVectorMat; //得到最终的setSVMDetector(const vector<float>& detector)参数中可用的检测子 vector<float> myDetector; //将resultMat中的数据复制到数组myDetector中 for(int i=0; i<DescriptorDim; i++) { myDetector.push_back(resultMat.at<float>(0,i)); } //最后添加偏移量rho,得到检测子 myDetector.push_back(svm.get_rho()); cout<<"检测子维数:"<<myDetector.size()<<endl; //设置HOGDescriptor的检测子 HOGDescriptor myHOG; myHOG.setSVMDetector(myDetector); //myHOG.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector()); //保存检测子参数到文件 ofstream fout("d:/xlw/HOGDetectorForOpenCV.txt"); for(int i=0; i<myDetector.size(); i++) { fout<<myDetector[i]<<endl; } /**************读入图片进行HOG行人检测******************/ Mat src = imread("d:/timg.png"); //Mat src = imread("2007_000423.jpg"); //Mat src = imread("1.png"); vector<Rect> found, found_filtered;//矩形框数组 cout<<"进行多尺度HOG人体检测"<<endl; myHOG.detectMultiScale(src, found, 0, Size(8,8), Size(32,32), 1.05, 2);//对图片进行多尺度行人检测 //src为输入待检测的图片;found为检测到目标区域列表;参数3为程序内部计算为行人目标的阈值,也就是检测到的特征到SVM分类超平面的距离; //参数4为滑动窗口每次移动的距离。它必须是块移动的整数倍;参数5为图像扩充的大小;参数6为比例系数,即测试图片每次尺寸缩放增加的比例; //参数7为组阈值,即校正系数,当一个目标被多个窗口检测出来时,该参数此时就起了调节作用,为0时表示不起调节作用。 cout<<"找到的矩形框个数:"<<found.size()<<endl; //找出所有没有嵌套的矩形框r,并放入found_filtered中,如果有嵌套的话,则取外面最大的那个矩形框放入found_filtered中 for(int i=0; i < found.size(); i++) { Rect r = found[i]; int j=0; for(; j < found.size(); j++) if(j != i && (r & found[j]) == r) break; if( j == found.size()) found_filtered.push_back(r); } //画矩形框,因为hog检测出的矩形框比实际人体框要稍微大些,所以这里需要做一些调整 for(int i=0; i<found_filtered.size(); i++) { Rect r = found_filtered[i]; r.x += cvRound(r.width*0.1); r.width = cvRound(r.width*0.8); r.y += cvRound(r.height*0.07); r.height = cvRound(r.height*0.8); rectangle(src, r.tl(), r.br(), Scalar(0,255,0), 3); } imwrite("d:/SVM/ImgProcessed3.jpg",src); namedWindow("src",0); imshow("src",src); waitKey();//注意:imshow之后必须加waitKey,否则无法显示图像 /******************读入单个64*128的测试图并对其HOG描述子进行分类*********************/ ////读取测试图片(64*128大小),并计算其HOG描述子 //Mat testImg = imread("person014142.jpg"); //Mat testImg = imread("noperson000026.jpg"); //vector<float> descriptor; //hog.compute(testImg,descriptor,Size(8,8));//计算HOG描述子,检测窗口移动步长(8,8) //Mat testFeatureMat = Mat::zeros(1,3780,CV_32FC1);//测试样本的特征向量矩阵 //将计算好的HOG描述子复制到testFeatureMat矩阵中 //for(int i=0; i<descriptor.size(); i++) // testFeatureMat.at<float>(0,i) = descriptor[i]; //用训练好的SVM分类器对测试图片的特征向量进行分类 //int result = svm.predict(testFeatureMat);//返回类标 //cout<<"分类结果:"<<result<<endl; system("pause"); } ```
stm8 的tim2 ch3通道 PA口,进行捕捉,无法进入中断?求解答?
tim2 ch3通道 初始化 void TIMER2_Catch_Init(void) { TIM2_CNTRH = 0x00;//清零计数器高8位 TIM2_CNTRL = 0x00;//清零计数器低8位 TIM2_PSCR = 0x10;//计数器时钟分频低8位16分频 TIM2_CCER2_CC3E=0;//关闭捕获功能 TIM2_CCMR3 =0x01;//滤波为0,分频为0,直接接到端口上 TIM2_CCER2_CC3P=1;//上升沿时发生捕获 TIM2_IER_CC3IE=1;//开启捕获中断 TIM2_CCER2_CC3E=1;//使能捕获功能 TIM2_CR1_CEN=1;//开启计数 } 中断函数: u16 vsync_cap_data_old,vsync_cap_data_new,vsync_period; u8 isCaptureOver; #pragma vector=0x10 __interrupt void TIM2_CAP_COM_IRQHandler(void) { if(TIM2_SR1_CC3IF) { TIM2_SR1_CC3IF = 0;//清除中断标志位 if(vsync_cap_data_old == 0x00) {//第一次捕获中断来临 vsync_cap_data_old = TIM2_CCR3H;//先读取高8位数据 vsync_cap_data_old = (unsigned int)(vsync_cap_data_old<<8) + TIM2_CCR3L;//再读取低8位数据 } else { //第二次捕获中断来临 vsync_cap_data_new = TIM2_CCR3H;//先读取高8位数据 vsync_cap_data_new = (unsigned int)(vsync_cap_data_new<<8) + TIM2_CCR3L;//再读取低8位数据 TIM2_IER_CC3IE=0;//关闭捕获中断 TIM2_CR1_CEN=0;//关闭计数 if(vsync_cap_data_new > vsync_cap_data_old) vsync_period = (vsync_cap_data_new - vsync_cap_data_old); else vsync_period = 0xFFFF + vsync_cap_data_new - vsync_cap_data_old; vsync_cap_data_old = 0x00; isCaptureOver = 1; } } } 主函数: if(isCaptureOver == 1) { //如果捕获完成则对数据进行处理 TIM2_CNTRH = 0x00;//清零计数器高8位 TIM2_CNTRL = 0x00;//清零计数器低8位 TIM2_IER_CC3IE=1;//开启捕获中断 TIM2_CR1_CEN=1;//开启计数 UART1_Send_nBit(vsync_period); isCaptureOver =0; }
不存在从"int"转换到"std::vector<cv::Mat,>>"的适当构造函数
void Cut_img(Mat src_img, int m, int n, vector<Mat> ceil_img) { int t = m * n; int height = src_img.rows; int width = src_img.cols; int ceil_height = height / m; int ceil_width = width / n; Mat roi_img, tmp_img; Point p1, p2; for (int i = 0; i<m; i++) for (int j = 0; j<n; j++) { //p1 = Rect rect(i + j*ceil_width, j + i*ceil_height, ceil_width, ceil_height); src_img(rect).copyTo(roi_img); ceil_img.push_back(roi_img); imshow("roi_img", roi_img); //getchar(); waitKey(0); //rectangle(i+j*ceil_width,j+i*ceil_height,); } } void show_images(vector<Mat> imgs, int n) { //do something } int _tmain(int argc, _TCHAR* argv[]) { Mat img = imread("dog.jpg", 1); imshow("src img", img); int m = 3; int n = 3; vector<Mat> ceil_img = m*n; Cut_img(img, m, n, ceil_img); waitKey(); return 0; } 整个代码是图片剪切的代码,问题出现在倒数第三行代码,cut_img(img,m,n,ceil_img); 错误为:不存在从"int"转换到"std::vector<cv::Mat,std::allocator<cv::Mat>>"的适当构造函数 还有错误C2440:"初始化":无法从“int”转换为"std::vector<cv::Mat,std::allocator<_Ty>>"
初学C++中类的使用,求助
初学类的使用,在Accelerated C++上遇到编程题目如下: 编写一个类以及相关的函数以为学生产生成绩,用P/F表示成绩 假设只根据期中和期末成绩来计算,而且,如果一个学生的平均考试分数大于等于60的话,那这个学生及格 输出时列出学生姓名并列出相应的成绩,成绩用P/F表示 从data.txt读入成绩信息,将成绩输出到result.txt data.txt截图如下: ![CSDN移动问答][1] 以下是我的代码: #include #include #include #include #include #include #include #include using namespace std; class Student_Info { private: string name; int mid,final; public: Student_Info(): name(" "),mid(0),final(0){}; //默认构造函数 Student_Info(string s,int x,int y); ~Student_Info(){} void input(string s, int x, int y); //读入学生成绩数据 inline string output_name(){return name;} //输出学生姓名 inline bool pass(){return ((mid+final)>=60)?1:0;} //判断是否及格 }; void Student_Info::input(string s,int x,int y) { name=s; mid=x; final=y; } Student_Info::Student_Info(string s,int x,int y) { input(s,x,y); } char grade(Student_Info student) { return student.pass()?'P':'F'; } int string2int(string txt) { int num; stringstream ss; ss< ss>>num; if(!ss.good()) { cerr<<"转换失败!"<<endl; exit(1); } return num; } int main() { vector students; vector pass; vector temp,names; vector points; string tmp,str; int x,y,i=0,length=0; Student_Info student; ifstream fin("data.txt"); ofstream fout("result.txt"); getline(fin, tmp); //cout< while(getline(fin,tmp)) { istringstream stream(tmp); while(stream>>str) temp.push_back(str); x=string2int(temp1); y=string2int(temp[2]); student.input(temp[0],x,y); students.push_back(student); pass.push_back(grade(student)); names.push_back(student.output_name()); temp.clear(); } for(;i<names.size();i++) { if(length<names[i].size()) length=names[i].size(); } length=max(length,12); fout<<left<<setw(length)<<"学生姓名"<<"学生成绩"<<endl; for(i=0;i<names.size();i++) fout<<left<<setw(length)<<names[i]<<pass[i]<<endl; fin.close(); fout.close(); system("pause"); return 0; } 问题如下: 在运行时只会瞬间弹出空的控制台并且立即退出,生成一个空的result.txt文档;在文件中添加测试语句(如以上代码所示),无输出。 尝试逐语句调试,在main函数两处涉及Student_Info类变量的声明处发现类私有成员都没有按照默认构造函数初始化 请问这究竟是什么原因造成的?该如何修改? [1]: http://img.my.csdn.net/uploads/201308/19/1376904155_8418.png
C++调用 C# dll 的问题
class ObjectResult { public: int objid; std::vector<cv::Rect> track; }; class TrackingResult { public: std::vector<ObjectResult> tracks; }; class Tracker { public: Tracker(){}; //构造函数,给对象初始化 virtual ~Tracker(){}; //析构函数,在程序运行结束后,清理一些空间 virtual bool init(const char* configFile)=0; //=0代表“纯虚函数” virtual void process(cv::Mat& color, int frameNum,cv::Rect roi)=0; //检测跟踪过程 virtual TrackingResult* getResult()=0; //获取检测跟踪后的一些结果参数 virtual void draw(cv::Mat& img)=0; //将检测跟踪结果画出来 }; extern "C" TRACKERAPI Tracker* CreatTracker(); //可被外部调用的C函数 这是C++的动态库的对外接口函数,怎么在C#里声明,调用呢?
vs2017编译报错,变量未初始化?
今天在写atcoder contest 080E - Young Maids时,在我的solve()函数里面总是说我的 down没有初始化,但是我明明在循环里面初始化了啊? 附上代码: ``` #include<iostream> #include<vector> #include<algorithm> using namespace std; vector<int> ans; int n; const int INF = 0x3f3f3f; void solve(vector<int> dir,int f,int s) { if (dir.empty()) return; int maxhead = 0, cnt = 0,down; for (int i = 0; i < dir.size()-1; ++i) { if (dir[i] != f && dir[i] != s) { if (dir[i + 1] != f && dir[i + 1] != s) { if (dir[i] > maxhead) { cout << "ok" << endl; cout << i << endl; maxhead = dir[i]; down = i; } } } } cout << down << endl; ans.push_back(dir[down + 1]); ans.push_back(dir[down]); vector<int> nex; for (int i = 0; i < dir.size(); ++i) { if (i != down && i!=down+1) { nex.push_back(dir[i]); } } solve(nex, f, s); } int main() { vector<int> iv; int temp,goalf=INF,goals=INF; cin >> n; for (int i = 0; i < n; ++i) { cin >> temp; iv.push_back(temp); if (temp < goalf && !(i%2)) { goalf = temp; } } int i; for (i = 0; iv[i] != goalf; ++i); for (int j = i + 1; j < n; ++j) { if (iv[j] < goals) { goals = iv[j]; } } cout << goalf << " " << goals << endl; solve(iv,goalf,goals); reverse(ans.begin(), ans.end()); for (int i = 0; i < ans.size(); ++i) { cout << ans[i] << " "; } cout << endl; system("pause"); return 0; } ``` 望各位能指点一二,谢了
串口中断接收标志位在初始化后就置1
源码先贴上来: 串口部分: #include<SM59A16U1.h> #include"uart.h" sbit LED1=P1^4; unsigned char a; unsigned char flag; void configure_uart0(void) { P3_2=0; //485接收模式 S0CON|=0x50; //设置为串口0模式1,使能串口接收 PCON|=0x80; // PFCON&=0xcf; AUX|=0x80; S0RELH =0x03; S0RELL =0xDC; IEN0|=0x90; //开总中断和串口中断 // TI = 0; //发送标志初始化 RI = 0; LED1=1; } void uart0_TX(void) { P3_2=1; //485发送模式 if(flag==1) { flag=0; S0BUF=a; while(!TI); TI=0; LED1=1; } P3_2=0; //485接收模式 } void uart0_Rec(void) interrupt d_UART0_Vector { IEN0&=0xef; //关闭串口0中断 if(RI&&(S0BUF!=0)) { a=S0BUF; LED1=0; flag=1; RI=0; } else { TI=0; } IEN0|=0x10; //打开串口0中断 } 主函数部分: #include<SM59A16U1.h> #include"uart.h" void main() { configure_uart0(); while(1) { uart0_TX(); } } 问题是这样的:在仿真时候,如果全速运行,在configure_uart0()完成后,串口0的中断标志位RI就自动置1了,RI不应该是单片机接收到数据才置1的吗?请教大神
【已解决】重载下标运算符后出现编译错误
按照教程想实现一个自定义的Vector类,重载了[]之后进行调用发现编译都通不过,不知道是什么原因。 下面是Vector类的片段。 ``` // 定义 Vector 模板类 typedef int Rank; // 秩,即下标 #define DEFAULT_CAPACITY 3 // 默认的初始容量 template <typename T> class Vector { protected: // 规模、容量、数据区 Rank _size; int _capacity; T* _elem; //省略其他部分 public: // 构造函数 Vector(int c = DEFAULT_CAPACITY, int s = 0, T v = 0) // 容量为c,规模为s,所有元素初始化为v { _elem = new T[_capacity = c]; for (_size = 0; _size < s; _elem[_size++] = v); } T& operator[](Rank r) const; // WWQ 自定义 T& get(Rank r) { return _elem[r]; } void show() { for (int i = 0; i < _size; i++) cout << _elem[i] << endl; cout << endl; } ``` 下面是对下标运算符的重载 ``` // 重载下标运算符 template <typename T> T& Vector<T>::operator[](Rank r) const { return _elem[r]; } ``` 在main()里创建一个Vector对象vs并初始化。vs.operator[](1) 和 vs[1]都无法访问,但是vs.get(1)可以,因此我怀疑是下标运算的重载有问题,可是又找不到哪里有问题,还请各位大神指教。 更新1: 发现并不是代码的问题,重载是没问题的。之前将重载实现在单独的.cpp文件,然后编译不了;后来直接在.h文件实现了重载,发现就没有问题了。 **终极更新【解决】: 原来类模板的定义是不能分离成.h文件和.cpp文件的,与类不同,类模板的声明与实现必须放在同一个文件!!!分开放了之后根本就找不到重载运算符的实现,自然就出错了,基础不牢,血的教训啊 详细内容参考:http://blog.csdn.net/pongba/article/details/19130。写的非常清楚。**
为什么测频函数中TA1无法因为捕获进入中断
int main( void ) { WDTCTL = WDTPW+WDTHOLD; DCOCTL|=CALDCO_16MHZ; BCSCTL1|=CALBC1_16MHZ; Lcd_Init(); //初始化OLED LCD_Clear(WHITE); //清屏 TA1CTL=TASSEL_2 + ID_0 + MC_1+ TAIE + TACLR; //TA01增计数至16000 TA1CCR0=16000-1; TA1CCTL0 |= CCIE; P1DIR&=~BIT1; P1SEL|=BIT1; TA0CTL=TASSEL_2 + MC_2 + TAIE + TACLR; //TA0连续计数 TA0CCTL1|=CAP+CM_1+CCIS_0+SCS+CCIE; BCSCTL2=SELS; ADC10CTL0 &= ~ENC; ADC10CTL1 |= INCH_1 + ADC10SSEL_3+CONSEQ_0; // 选择通道A0 时钟源选择SMCLK ADC10CTL0 |= ADC10SHT_2+ ADC10ON + ADC10IE; // ADC10ON, interrupt 选择内部参考源3.6V 4个ADC周期; ADC10AE0 |= BIT1;//通道A0使能 _EINT(); while(1){ ADC10CTL0 |= ENC + ADC10SC; for(int m=0;m<199-1;m++) { if(a[199]<a[m]) a[199] = a[m]; if(a[0]>a[m]) a[0]=a[m]; } max = a[199]; min = a[0]; ADC = 2*(max - min)*3.6/1024; ADCss=ADC*100; ADCs=ADCss%100; } } #pragma vector=TIMER1_A0_VECTOR __interrupt void Timer_A1(void) { xianshi(); LCD_Clear(WHITE); f=f; fss=f*100; fs=fss%100; } #pragma vector=TIMER0_A0_VECTOR __interrupt void Timer_A0(void) { switch(TA0IV) { case 2:f= TA_cnt*65536+TA0CCR1-PerVal; PerVal=TA0CCR1; TA_cnt=0; break; case 4:break; case 10:TA_cnt= TA_cnt+1; break; } }
java中panel实现线程接口以后,要调用repaint函数时,不进run函数
具体情况是 mypanel类实现了线程接口,在run函数中定义了sleep(100)后调用repaint函数,做一个小坦克游戏,在repaint之前要判断是否击中坦克,击中后要显示三张图片来体现爆炸效果,可是经过调试发现,每次第一次击中的时候,都是直接好多次repaint,没有休眠,后来发现根本就没有进mypanel的run()方法,好像有另一个其他线程再调用paint。这是怎么回事?感谢大家了 package com.TankGame; import java.awt.*; import java.util.*; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.*; public class MyTankGame1 extends JFrame{ public static void main(String[] args) { // TODO Auto-generated method stub MyTankGame1 tankgame = new MyTankGame1(); } //构造函数 public MyTankGame1(){ MyPanel mp = new MyPanel(); //启动mp线程 Thread t = new Thread(mp); t.start(); this.add(mp); this.addKeyListener(mp); this.setIconImage(new ImageIcon("TankImage/TANK.jpg").getImage()); this.setTitle("坦克大战"); this.setLocation(350, 100); this.setSize(500, 400); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } } //我的面板类 class MyPanel extends JPanel implements KeyListener,Runnable{ //定义一个玩家的坦克 MyTank mytank = null; Vector<EnemyTank> ets= new Vector<EnemyTank>(); //定义爆炸效果集合 Vector<Boom> boom = new Vector<Boom>(); int enSize = 8; //定义三张图片,三张图片组成一次爆炸 Image image1 = null; Image image2 = null; Image image3 = null; //构造函数 public MyPanel(){ mytank = new MyTank(100,250); mytank.setType(0); for(int i=0;i<enSize;i++){ EnemyTank et = new EnemyTank((i+1)*50,0); et.setType(1); et.setDirect(1); et.setType(1); ets.add(et); } //初始化图片 image1 = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/1.jpg")); image2 = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/2.jpg")); image3 = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/3.jpg")); } public void hittank(Bullet b,EnemyTank et){ //判断该坦克的方向 switch(et.direct){ //方向朝上或者下 case 0: case 1: if(b.x>et.x&&b.x<et.x+20&&b.y>et.y&&b.y<et.y+30){ //击中 //子弹死亡 坦克死亡 b.isAlive=false; et.isLive=false; //创建一个爆炸效果,放入boom Boom bom = new Boom(et.x,et.y); boom.add(bom); } case 2: case 3: if(b.x>et.x-5&&b.x<et.x+25&&b.y>et.y+5&&b.y<et.y+25){ //击中 b.isAlive=false; et.isLive=false; Boom bom = new Boom(et.x,et.y); boom.add(bom); } } } //方向:上下左右,对应0123 public void paint(Graphics g){ super.paint(g); System.out.println("xx"); g.fillRect(0, 0, 500, 500); this.drawTank(this.mytank.getX(), this.mytank.getY(), g, this.mytank.getDirect(), this.mytank.getType() ); //从ss中画出所有子弹 for(int i=0;i<this.mytank.ss.size();i++){ Bullet b = mytank.ss.get(i); if(b!=null&&b.isAlive==true){ g.drawRect(b.x, b.y, 1, 1); } if(b.isAlive==false){ //从ss中删掉该子弹 mytank.ss.remove(b); } } for(int i=0;i<ets.size();i++){ EnemyTank et = ets.get(i); if(et.isLive){ this.drawTank(et.getX(), et.getY(), g, et.getDirect(), et.getType()); } } //画出爆炸 System.out.println(boom.size()); for(int j=0;j<boom.size();j++){ Boom bom = boom.get(j); if(bom.life>6){ g.drawImage(image1, bom.x, bom.y, 30, 30, this); }else if(bom.life>3){ g.drawImage(image2, bom.x, bom.y, 30, 30, this); }else{ g.drawImage(image3, bom.x, bom.y, 30, 30, this); } //让爆炸进行 bom.lifeDown(); if(bom.life==0){ boom.remove(bom); } } } //画出坦克的函数 public void drawTank(int x,int y,Graphics g,int direct,int type){ switch(type){ case 0: g.setColor(Color.cyan); break; case 1: g.setColor(Color.yellow); break; } switch(direct){ case 0://向上走 g.fill3DRect(x, y, 5, 30, false); g.fill3DRect(x+15, y, 5, 30, false); g.fill3DRect(x+5, y+5, 10, 20,false); g.fillOval(x+5, y+10, 10, 10); g.drawLine(x+10, y+15, x+10, y); g.drawOval(x+5, y+10, 10, 10); break; case 3://向右走 g.fill3DRect(x-5, y+5, 30, 5, false); g.fill3DRect(x-5, y+20, 30, 5, false); g.fill3DRect(x, y+10, 20, 10, false); g.fillOval(x+5, y+10, 10, 10); g.drawLine(x+10, y+15, x+25, y+15); g.drawOval(x+5, y+10, 10, 10); break; case 1://向下走 g.fill3DRect(x, y, 5, 30, false); g.fill3DRect(x+15, y, 5, 30, false); g.fill3DRect(x+5, y+5, 10, 20,false); g.fillOval(x+5, y+10, 10, 10); g.drawLine(x+10, y+15, x+10, y+30); g.drawOval(x+5, y+10, 10, 10); break; case 2://向右走 g.fill3DRect(x-5, y+5, 30, 5, false); g.fill3DRect(x-5, y+20, 30, 5, false); g.fill3DRect(x, y+10, 20, 10, false); g.fillOval(x+5, y+10, 10, 10); g.drawLine(x+10, y+15, x-5, y+15); g.drawOval(x+5, y+10, 10, 10); break; } } @Override public void keyTyped(KeyEvent e) { } @Override public void keyPressed(KeyEvent e) { // TODO Auto-generated method stub if(e.getKeyCode()==KeyEvent.VK_UP){ this.mytank.setDirect(0); this.repaint(); this.mytank.moveUp(); } else if(e.getKeyCode()==KeyEvent.VK_DOWN){ this.mytank.setDirect(1); this.repaint(); this.mytank.moveDown(); } else if(e.getKeyCode()==KeyEvent.VK_LEFT){ this.mytank.setDirect(2); this.repaint(); this.mytank.moveLeft(); } else if(e.getKeyCode()==KeyEvent.VK_RIGHT){ this.mytank.setDirect(3); this.repaint(); this.mytank.moveRight(); } } @Override public void keyReleased(KeyEvent e) { // TODO Auto-generated method stub if(e.getKeyCode()==KeyEvent.VK_SPACE){ if(this.mytank.ss.size()<=4){ this.mytank.fire(); } } } @Override public void run() { // TODO Auto-generated method stub //每隔100毫秒重绘 while(true){ System.out.println("sleep"); try { Thread.sleep(30); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } //判断是否击中 for(int i=0;i<mytank.ss.size();i++){ Bullet mb = mytank.ss.get(i); //判断子弹是否有效 if(mb.isAlive){ //取出每一个坦克,与子弹判断是否击中 for(int j=0;j<ets.size();j++){ //取出坦克 EnemyTank et = ets.get(j); if(et.isLive){ this.hittank(mb, et); } } } } this.repaint(); } } } //子弹类 class Bullet implements Runnable{ int x; int y; int direct; int speed=1; boolean isAlive = true; public Bullet(int x,int y,int direct){ this.x=x; this.y=y; this.direct = direct; } @Override public void run() { // TODO Auto-generated method stub while(true){ try { Thread.sleep(25); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } switch(direct){ case 0: y-=speed; break; case 1: y+=speed; break; case 2: x-=speed; break; case 3: x+=speed; break; } //子弹何时死亡? //判断子弹到达边界 if(x<-1||x>501||y<-1||y>501){ this.isAlive=false; break; } } } } //坦克类 class Tank{ //坦克的种类 int type; public int getType() { return type; } public void setType(int type) { this.type = type; } //坦克的速度 int speed = 1; public int getSpeed() { return speed; } public void setSpeed(int speed) { this.speed = speed; } public int getDirect() { return direct; } public void setDirect(int direct) { this.direct = direct; } int direct = 0; //坦克的横纵坐标 int x=0; public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } int y=0; public Tank(int x,int y){ this.x=x; this.y=y; } } class MyTank extends Tank{ Bullet mb = null; public MyTank(int x,int y){ super(x,y); } Vector<Bullet> ss = new Vector<Bullet>(); //开火能力 public void fire(){ switch(this.direct){ case 0: mb = new Bullet(this.getX()+10,this.getY(),0); ss.add(mb); break; case 1: mb = new Bullet(this.getX()+10,this.getY()+30,1); ss.add(mb); break; case 2: mb = new Bullet(this.getX()-5,this.getY()+15,2); ss.add(mb); break; case 3: mb = new Bullet(this.getX()+25,this.getY()+15,3); ss.add(mb); break; } Thread t = new Thread(mb); t.start(); } public void moveUp(){ y-=speed; } public void moveRight(){ x+=speed; } public void moveDown(){ y+=speed; } public void moveLeft(){ x-=speed; } } class EnemyTank extends Tank{ boolean isLive = true; public EnemyTank(int x,int y){ super(x, y); } } class Boom{ int x; int y; int life = 9;//爆炸的时间过程 boolean isLive = true; public Boom(int x, int y){ this.x=x; this.y=y; } //过程减少 public void lifeDown(){ if(life>0){ life--; }else{ this.isLive=false; } } } ``` ```
C++STL中 stable_sort()函数BUG!!帅哥们求helping
#define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; #include<vector> #include<functional> #include <algorithm> template<typename T> class Stduent { public: Stduent(char *p, int age) { this->p_name = new char[strlen(p) + 1]; strcpy(this->p_name, p); this->age = age; } Stduent(const Stduent&obj) { this->p_name = new char[strlen(obj.p_name) + 1]; strcpy(this->p_name, obj.p_name); this->age = obj.age;//重载copy函数是因为副本要拷贝 防止副本和原来都指向同一块1内存 } void print() { cout << "p_name " << this->p_name << endl; } int return_() { return this->age; } //重载= 是因为 为了支持泛型编程 Stduent& operator=(const Stduent&other) { /*Stduent<int> s4("hello", 1); s2=s4 = s3; =号操作而不是初始化操作 所以this-指向的内存必须先释放掉*/ if (this->p_name != NULL) { delete[] this->p_name; this->p_name = NULL; this->age = 0; } this->p_name = new char[strlen(other.p_name) + 1]; strcpy(this->p_name, other.p_name); this->age = other.age; return *this; } public: char *p_name; int age; }; bool temping( Stduent<int>& t1,const Stduent<int>& t2) { if (t1.age > t2.age) { return true; }else { return false; } } void main() { Stduent<int> s1("悦儿", 19); Stduent<int> s2("杨阳", 21); Stduent<int> s3("杨依", 0); Stduent<int> s4("hello", 1); s4 = s3; vector<Stduent<int>> v1; v1.push_back(s1); v1.push_back(s2); v1.push_back(s3); v1.push_back(s4); for (vector<Stduent<int>>::iterator it = v1.begin(); it != v1.end(); it++) { it->print(); } // 下面是函数对象!!! stable_sort(v1.begin(), v1.end(), ffc());//error :第三个参数出错 system("pause"); }
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
Vue + Spring Boot 项目实战(十四):用户认证方案与完善的访问拦截
本篇文章主要讲解 token、session 等用户认证方案的区别并分析常见误区,以及如何通过前后端的配合实现完善的访问拦截,为下一步权限控制的实现打下基础。
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 cpp 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7 p...
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
漫话:什么是平衡(AVL)树?这应该是把AVL树讲的最好的文章了
这篇文章通过对话的形式,由浅入深带你读懂 AVL 树,看完让你保证理解 AVL 树的各种操作,如果觉得不错,别吝啬你的赞哦。 1、若它的左子树不为空,则左子树上所有的节点值都小于它的根节点值。 2、若它的右子树不为空,则右子树上所有的节点值均大于它的根节点值。 3、它的左右子树也分别可以充当为二叉查找树。 例如: 例如,我现在想要查找数值为14的节点。由于二叉查找树的特性,我们可...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
开源并不是你认为的那些事
点击上方蓝字 关注我们开源之道导读所以 ————想要理清开源是什么?先要厘清开源不是什么,名正言顺是句中国的古代成语,概念本身的理解非常之重要。大部分生物多样性的起源,...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC...
【技巧总结】位运算装逼指南
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。 判断奇偶数 判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下...
《C++ Primer》学习笔记(六):C++模块设计——函数
专栏C++学习笔记 《C++ Primer》学习笔记/习题答案 总目录 https://blog.csdn.net/TeFuirnever/article/details/100700212 —————————————————————————————————————————————————————— 《C++ Primer》习题参考答案:第6章 - C++模块设计——函数 文章目录专栏C+...
8年经验面试官详解 Java 面试秘诀
作者 |胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。 Java程序员准备和投递简历的实...
面试官如何考察你的思维方式?
1.两种思维方式在求职面试中,经常会考察这种问题:北京有多少量特斯拉汽车?某胡同口的煎饼摊一年能卖出多少个煎饼?深圳有多少个产品经理?一辆公交车里能装下多少个乒乓球?一个正常成年人有多少根头发?这类估算问题,被称为费米问题,是以科学家费米命名的。为什么面试会问这种问题呢?这类问题能把两类人清楚地区分出来。一类是具有文科思维的人,擅长赞叹和模糊想象,它主要依靠的是人的第一反应和直觉,比如小孩...
so easy! 10行代码写个"狗屁不通"文章生成器
前几天,GitHub 有个开源项目特别火,只要输入标题就可以生成一篇长长的文章。 背后实现代码一定很复杂吧,里面一定有很多高深莫测的机器学习等复杂算法 不过,当我看了源代码之后 这程序不到50行 尽管我有多年的Python经验,但我竟然一时也没有看懂 当然啦,原作者也说了,这个代码也是在无聊中诞生的,平时撸码是不写中文变量名的, 中文...
知乎高赞:中国有什么拿得出手的开源软件产品?(整理自本人原创回答)
知乎高赞:中国有什么拿得出手的开源软件产品? 在知乎上,有个问题问“中国有什么拿得出手的开源软件产品(在 GitHub 等社区受欢迎度较好的)?” 事实上,还不少呢~ 本人于2019.7.6进行了较为全面的回答,对这些受欢迎的 Github 开源项目分类整理如下: 分布式计算、云平台相关工具类 1.SkyWalking,作者吴晟、刘浩杨 等等 仓库地址: apache/skywalking 更...
MySQL数据库总结
一、数据库简介 数据库(Database,DB)是按照数据结构来组织,存储和管理数据的仓库。 典型特征:数据的结构化、数据间的共享、减少数据的冗余度,数据的独立性。 关系型数据库:使用关系模型把数据组织到数据表(table)中。现实世界可以用数据来描述。 主流的关系型数据库产品:Oracle(Oracle)、DB2(IBM)、SQL Server(MS)、MySQL(Oracle)。 数据表:数...
相关热词 c# plc s1200 c#里氏转换原则 c# 主界面 c# do loop c#存为组套 模板 c# 停掉协程 c# rgb 读取图片 c# 图片颜色调整 最快 c#多张图片上传 c#密封类与密封方法
立即提问