首页 文章 精选 留言 我的

精选列表

搜索[c ],共10000篇文章
优秀的个人博客,低调大师

c++ template学习总结3

和往常一样,先来看一段代码: #include <stdexcept> template <typename T, int MAXSIZE> class Stack { private: T elems[MAXSIZE]; // elements int numElems; // current number of elements public: Stack(); // constructor void push(T const&); // push element void pop(); // pop element T top() const; // return top element bool empty() const { // return whether the stack is empty return numElems == 0; } bool full() const { // return whether the stack is full return numElems == MAXSIZE; } }; // constructor template <typename T, int MAXSIZE> Stack<T,MAXSIZE>::Stack () : numElems(0) // start with no elements { // nothing else to do } template <typename T, int MAXSIZE> void Stack<T,MAXSIZE>::push (T const& elem) { if (numElems == MAXSIZE) { throw std::out_of_range("Stack<>::push(): stack is full"); } elems[numElems] = elem; // append element ++numElems; // increment number of elements } template<typename T, int MAXSIZE> void Stack<T,MAXSIZE>::pop () { if (numElems <= 0) { throw std::out_of_range("Stack<>::pop(): empty stack"); } --numElems; // decrement number of elements } template <typename T, int MAXSIZE> T Stack<T,MAXSIZE>::top () const { if (numElems <= 0) { throw std::out_of_range("Stack<>::top(): empty stack"); } return elems[numElems-1]; // return last element } 接下来编写我们的测试函数: #include <iostream> #include <string> #include <cstdlib> #include "stack4.hpp" int main() { try { Stack<int,20> int20Stack; // stack of up to 20 ints Stack<int,40> int40Stack; // stack of up to 40 ints Stack<std::string,40> stringStack; // stack of up to 40 strings // manipulate stack of up to 20 ints int20Stack.push(7); std::cout << int20Stack.top() << std::endl; int20Stack.pop(); // manipulate stack of up to 40 strings stringStack.push("hello"); std::cout << stringStack.top() << std::endl; stringStack.pop(); stringStack.pop(); } catch (std::exception const& ex) { std::cerr << "Exception: " << ex.what() << std::endl; return EXIT_FAILURE; // exit program with ERROR status } } 大家要注意int20Stack和int40Stack是两个不同的类型,他们是不能进行硬是或者显示的转换的。也不能够相互赋值。 你还可以为函数模板定义非型别参数: template <typename T, int VAL> T addValue (T const& x) { return x + VAL; } 当我们想把【函数】和某种操作作为参数传递的时候,就非常有用,比如在使用STL时,你可能有下面的代码: std::transform (source.begin(), source.end(), // start and end of source dest.begin(), // start of destination addValue<int,5>); // operation 有时候我们为了使得编译器推导的时候简单一些,可以使用: std::transform (source.begin(), source.end(), // start and end of source dest.begin(), // start of destination (int(*)(int const&)) addValue<int,5>); // operation 但是我们要注意,非类型模板参数也有自己的局限,通常来说他们只能是常整数,包括枚举,或者指向外部链接的指针。如果我们用浮点数或者class-type objects作为非类型模板参数是错误的: template <double VAT> // ERROR: floating-point values are not double process (double v) // allowed as template parameters { return v * VAT; } template <std::string name> // ERROR: class-type objects are not class MyClass { // allowed as template parameters … }; 由于字串字面常熟是一种采用内部链接的物件,也就是说不通模组中的两个同值的字串字面常数其实是两个不同的东西,所以他们也不能用来作为模板参数: template <char const* name> class MyClass { … }; MyClass<"hello"> x; // ERROR: string literal "hello" not allowed 此外全局指针也是不行的: template <char const* name> class MyClass { … }; char const* s = "hello"; MyClass<s> x; // ERROR: s is pointer to object with internal linkage 但是下面的例子是可以的: template <char const* name> class MyClass { … }; extern char const s[] = "hello"; MyClass<s> x; // OK 在这个例子中,s是一个外部连接的部件。 ============================================================================== 本文转自被遗忘的博客园博客,原文链接:http://www.cnblogs.com/rollenholt/archive/2012/03/08/2384762.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

c++ template归纳学习5

双重模板参数: 我们还是以前几篇中的Stack为例子i:代码如下: template <typename T, template <typename ELEM> class CONT = std::deque > class Stack { private: CONT<T> elems; // elements public: void push(T const&); // push element void pop(); // pop element T top() const; // return top element bool empty() const { // return whether the stack is empty return elems.empty(); } }; 在这段代码中,我们的第二个模板参数修改为:template <typename ELEM> class CONT 和往常一样,你可以使用class替代typename,但是CONT必须是class。 template <typename T, template <class ELEM> class CONT = std::deque> // OK class Stack { … }; but the following is not: template <typename T, template <typename ELEM> typename CONT = std::deque> class Stack { // ERROR … }; 由于上面例子中的ELEM实际中没有用到,其实是可以省略的。 我们实现一个成员函数看看: template <typename T, template <typename> class CONT> void Stack<T,CONT>::push (T const& elem) { elems.push_back(elem); // append copy of passed elem } 但是如果试图使用上面的stack,编译器会说deque不符合CONT的要求,问题在于,std中的deque要求不只是一个参数,第二个参数是一个配置器,他虽然有预设值,但是当它被用来匹配CONT参数的时候,预设值被编译器忽略了。 对于这个问题,我们可以修改,使得CONT参数要求一个带两个参数的容器。 template <typename T, template <typename ELEM, typename ALLOC = std::allocator<ELEM> > class CONT = std::deque> class Stack { private: CONT<T> elems; // elements … }; 最终版本如下: // basics/stack8.hpp #ifndef STACK_HPP #define STACK_HPP #include <deque> #include <stdexcept> #include <allocator> template <typename T, template <typename ELEM, typename = std::allocator<ELEM> > class CONT = std::deque> class Stack { private: CONT<T> elems; // elements public: void push(T const&); // push element void pop(); // pop element T top() const; // return top element bool empty() const { // return whether the stack is empty return elems.empty(); } // assign stack of elements of type T2 template<typename T2, template<typename ELEM2, typename = std::allocator<ELEM2> >class CONT2> Stack<T,CONT>& operator= (Stack<T2,CONT2> const&); }; template <typename T, template <typename,typename> class CONT> void Stack<T,CONT>::push (T const& elem) { elems.push_back(elem); // append copy of passed elem } template<typename T, template <typename,typename> class CONT> void Stack<T,CONT>::pop () { if (elems.empty()) { throw std::out_of_range("Stack<>::pop(): empty stack"); } elems.pop_back(); // remove last element } template <typename T, template <typename,typename> class CONT> T Stack<T,CONT>::top () const { if (elems.empty()) { throw std::out_of_range("Stack<>::top(): empty stack"); } return elems.back(); // return copy of last element } template <typename T, template <typename,typename> class CONT> template <typename T2, template <typename,typename> class CONT2> Stack<T,CONT>& Stack<T,CONT>::operator= (Stack<T2,CONT2> const& op2) { if ((void*)this == (void*)&op2) { // assignment to itself? return *this; } Stack<T2> tmp(op2); // create a copy of the assigned stack elems.clear(); // remove existing elements while (!tmp.empty()) { // copy all elements elems.push_front(tmp.top()); tmp.pop(); } return *this; } #endif // STACK_HPP 测试如下: // basics/stack8test.cpp #include <iostream> #include <string> #include <cstdlib> #include <vector> #include "stack8.hpp" int main() { try { Stack<int> intStack; // stack of ints Stack<float> floatStack; // stack of floats // manipulate int stack intStack.push(42); intStack.push(7); // manipulate float stack floatStack.push(7.7); // assign stacks of different type floatStack = intStack; // print float stack std::cout << floatStack.top() << std::endl; floatStack.pop(); std::cout << floatStack.top() << std::endl; floatStack.pop(); std::cout << floatStack.top() << std::endl; floatStack.pop(); } catch (std::exception const& ex) { std::cerr << "Exception: " << ex.what() << std::endl; } // stack for ints using a vector as an internal container Stack<int,std::vector> vStack; … vStack.push(42); vStack.push(7); std::cout << vStack.top() << std::endl; vStack.pop(); } 程序的输出为: 7 42 Exception: Stack<>::top(): empty stack 7 ============================================================================== 本文转自被遗忘的博客园博客,原文链接:http://www.cnblogs.com/rollenholt/archive/2012/03/08/2384921.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

weblogic 12c 静默安装

静默安装,意思就是不需要vnc之类去连接图像界面,按照以下步骤是可以顺利完成 准备jdk环境 vim/etc/profile添加 exportJAVA_HOME=/usr/java/jdk exportJRE_HOME=/usr/java/jdk/jre exportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib exportPATH=$JAVA_HOME/bin:$PATH fmw_12.1.3.0.0_wls.jar oraInst.loc wls.rsp useraddweblogic 操作的时候有一点要特别注意,就是切换weblogic的时候,正确的做法是su-weblogic,而不是suweblogic useraddweblogic echo"xx"|passwd--stdinweblogic 1.创建oraInst.loc文件 inventory_loc=/opt/weblogic/oraInventory1 inst_group=weblogic 2.创建wls.rsp响应文件 inventory_loc=/opt/weblogic/oraInventory1 inst_group=weblogic [root@ct1src]#cat*.rsp [ENGINE] ResponseFileVersion=1.0.0.0.0 [GENERIC] ORACLE_HOME=/opt/weblogic/Oracle/Middleware #SetthisvariablevaluetotheInstallationTypeselected.e.g.WebLogicServer,Coherence,CompletewithExamples. INSTALL_TYPE=WebLogicServer DECLINE_SECURITY_UPDATES=true SECURITY_UPDATES_VIA_MYORACLESUPPORT=false 3.su-webLogic mkdir-p/opt/weblogic/Oracle/Middleware exportDISPLAY=:0.0这不很重要 4.开始安装 java-jarfmw_12.1.3.0.0_wls.jar-silent-responseFile/opt/src/wls.rsp-invPtrLoc/opt/src/oraInst.loc 出现从20%到100%代表顺利完成 如果有错误,请到/opt/weblogic/Oracle/Middleware/logs查看log 成功后执行/opt/weblogic/Oracle/Middleware/wlserver/server/bin/setWLSEnv.sh 可以把输出的classpath直接加到/etc/profile 5.内存优化,否则创建域的时候很慢 ./Oracle/Middleware/oracle_common/rda/da/da.sh ./Oracle/Middleware/oracle_common/common/bin/commEnv.sh MEM_ARGS="-Xms2048m-Xmx4096m-XX:MaxPermSize=1024m" UTILS_MEM_ARGS="-Xms32m-Xmx1024m" 6.创建域 su-weblogic mkdir-p/opt/weblogic/Oracle/Middleware/user_projects/domains/hnDomain cd/opt/webLogic vimcreate_domain.rsp readtemplatefrom"/opt/weblogic/Oracle/Middleware/wlserver/common/templates/wls/wls.jar"; setJavaHome"/usr/java/jdk"; setServerStartMode"dev"; findServer"AdminServer"asAdminServer; setAdminServer.ListenAddress""; setAdminServer.ListenPort"8001"; setAdminServer.SSL.Enabled"true"; setAdminServer.SSL.ListenPort"8002"; //Wecandirectlycreateanewmanagedserver. createServer"ms1"asMS1; setMS1.ListenAddress""; setMS1.ListenPort"8003"; //setMS1.SSL.Enabled"true"; //setMS1.SSL.ListenPort"7004″; //CreateMachine createMachine"shaiksameer.com"asMachinename; //usetemplatesdefaultweblogicuser findUser"weblogic"asu1; setu1.password"weblogic123"; //createanewuser createUser"weblogic2"asu2; setu2.password"weblogic123"; writedomainto"/opt/weblogic/Oracle/Middleware/user_projects/domains/hnDomain"; //Thedomainnamewillbe"demo-domain" closetemplate; 就是以上,有几个地方说明以下 createMachine"shaiksameer.com"asMachinename;这名字自己取 createServer"ms1"asMS1;有这个好像启动会报说这个server找不到,先这样 7.开始吧 su-weblogic touch/opt/weblogic/create_domain.log cd/opt/weblogic/Oracle/Middleware/wlserver/common/bin ./config.sh-mode=silent-silent_script=/opt/weblogic/create_domain.rsp-logfile=/opt/weblogic/create_domain.log-Djava.security.egd=file:/dev/urandom 执行会比较慢 建议nohup./config.sh-mode=silent-silent_script=/opt/weblogic/create_domain.rsp-logfile=/opt/weblogic/create_domain.log-Djava.security.egd=file:/dev/urandom& 8.完成后 cd/opt/weblogic/Oracle/Middleware/user_projects/domains/hnDomain 修改./bin/setDomainEnv.sh: WLS_MEM_ARGS_64BIT="-Xms2048m-Xmx4096m" ./startWebLogic.sh& 9.ss-an 有8001,8002就行,然后访问http://ip:8001/console 密码在create_domain.rsp 10.这个是安装的过程,weblogic还有更多的东西 本文转自 liqius 51CTO博客,原文链接:http://blog.51cto.com/szgb17/1782037,如需转载请自行联系原作者

优秀的个人博客,低调大师

Objective-C之数字对象

int , float , long都是OC的基本数据类型,但是(!important)它们都不是对象。但是有的时候需要将他们最为一个对象来使用,例如:NSArray要求存储的值必须是对象。那么这里就可以使用NSNumber类。 一 , 为NSNumber赋值: ① :赋值一个int类型的值,创建和初始化int2O = [NSNumber numberWithInteger:100] 意义: 为int2O赋值整形100对象 ②:获得init2O的的值init2Get = [init2O integerValue] 注意 : integerValue说明init2O里面存的是int类型的值 例如: #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { NSNumber *init2O; NSInteger init2Get; init2O = [NSNumber numberWithInteger:100]; init2Get = [init2O integerValue]; NSLog(@"%li",(long)init2Get); } return 0; } 结果: 二,可以使用initWithInteger来直接实例化一个NSNumber 其他的类型 赋值方法 实例化 检索方法 numberWithChar initWithChar charValue numberWithUnsignedChar initWithUnsignedChar unsignedCharValue numberWithShort initWithShort shortValue numberWithUnsignedShort initWithUnsignedShort unsignedShortValue numberWithInteger initWithInteger integerValue numberWithUnsignedInteger initWithUnsignedInteger unsignedIntegerValue numberWithInt initWithInt intValue numberWithUnsignedInt initWithUnsignedInt unsignedIntValue numberWithLong initWithLong longValue numberWithUnsignedLong initWithUnsignedLong unsignedLongValue numberWithLongLong initWithLongLong longlongValue numberWithUnsignedLongLong initWithUnsignedLongLong unsignedLongLongValue numberWithFloat initWithFloat floatValue numberWithDouble initWithDouble doubletValue numberWithBool initWithBool booltValue 验证2个number是否是相等的 #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { NSNumber *init2O = [[NSNumber alloc] initWithInteger:100]; NSInteger init2Get; init2Get = [init2O integerValue]; NSLog(@"%li",(long)init2Get); //验证是否相等 NSNumber *float2O = [[NSNumber alloc] initWithFloat:100.00]; if( [init2O isEqualToNumber:float2O] == YES){ NSLog(@"Equal!!!"); } } return 0; } 结果: 验证小于 #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { NSNumber *init2O = [[NSNumber alloc] initWithInteger:100]; NSInteger init2Get; init2Get = [init2O integerValue]; NSLog(@"%li",(long)init2Get); //验证是否相等 NSNumber *float2O = [[NSNumber alloc] initWithFloat:100.00]; if( [init2O compare:float2O] == NSOrderedAscending){ NSLog(@"Asc!!!"); }else{ NSLog(@"No Asc"); } } return 0; } 结果: 本文转自Aonaufly51CTO博客,原文链接:http://blog.51cto.com/aonaufly/2054108,如需转载请自行联系原作者

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册