C++技巧总结

【道路工程师小卢】CSP题目 C++实现 【道路工程师小卢】小卢是一名道路工程师,负责铺设一条长度为 n 的道路。铺设道路的主要工作是填平下陷的地表。整段道路可以看作是 n 块首尾相连的区域,一开始,第 i 块区域下陷的深度为 di​。小卢每天可以选择一段连续区间 [L,R],填充这段区间中的每块区域,让其下陷深度减少 1。在选择区间时,需要保证,区间内的每块区域在填充前下陷深度均不为 0 。 小卢希望你能帮他设计一种方案,可以在最短的时间内将整段道路的下陷深度都变为 0。 阅读详情

字符串分割

字符串截取

0、find函数
参考:https://blog.youkuaiyun.com/haiross/article/details/45746203
find函数

原型:

size_t find ( const string& str, size_t pos = 0 ) const;

功能:查找子字符串第一次出现的位置。
参数说明:str为子字符串,pos为初始查找位置。
返回值:找到的话返回第一次出现的位置,否则返回string::npos
1、使用std::string::substr()函数截取。

string substr (size_t pos = 0, size_t len = npos) const;

功能:按照条件截取字符串
参数:pos=截取起始位
其中strSub是需要寻找的子字符串,npos为查找起始位置。找到返回子字符串首次出现的位置,否则返回-1;

len=截取长度

2、cut=“jpg”,得到扩展名。其中,str.find_last_of(".")返回str字符串中最后一个’.'的所在下标,这里返回8(int)。关于string::find_first_of()、string::find_first_not_of()、string::find_last_of()、string::find_last_not_of()

string str1 = "cup,car,person,car,booo";
string str2 = "ako";
 
 
int num_1 = str1.find_first_of(str2);//返回str1中第一个与str2的第一个字符('a')相同字符的下标 ,返回5
int num_2 = str1.find_first_not_of(str2);//返回str1中第一个与str2的第一个字符('a')不同字符的下标 ,返回0
 
 
int num_3 = str1.find_last_of(str2);//返回str1中最后一个与str2的最后一个字符('o')相同字符的下标 ,返回22
int num_4 = str1.find_last_not_of(str2);//返回str1中最后一个与str2的最后一个字符('o')不同字符的下标 ,返回19

所以,截取拓展名的代码如下:

string str = "image007.jpg";
string cut= str.substr(0,str.find_last_of("."));

3、strtok函数
原型: char *strtok(char *str, const char *delim);
功能: 分解字符串为一组字符串。
参数说明:str为要分解的字符串,delim为分隔符字符串。
返回值: 从str开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。
其它: strtok函数线程不安全,可以使用strtok_r替代。

//借助strtok实现split
#include <string.h>
#include <stdio.h>
 
int main()
{
    char chArry[] = "one two   three,four * five";
    const char *d = " ,*";
    char *p;
    p = strtok(s,d);
    while(p != NULL)
    {
        printf("%s\n", p);
        p=strtok(NULL, d);
    }
    return 0;
}

利用字符串做数组下标索引,做字符统计。

//统计每个字符串出现的次数
int main(){
    string input;

    while(getline(cin, input)){
        vector<int> table(125,0);
        for(auto &ele: input){
            table[ele] ++;
        }
        for(int i = 0;i < table.size();i++){
            if(table[i] != 0){
                printf("%c %d ",i,table[i]);
            }
        }
        cout<<endl;
    }

    return 0;
}

erase的使用
有三种用法:
(1)erase(pos,n); 删除从pos开始的n个字符,比如erase(0,1)就是删除第一个字符
(2)erase(position);删除position处的一个字符(position是个string类型的迭代器)
(3)erase(first,last);删除从first到last之间的字符(first和last都是迭代器)

容器中元素查找

find可以找到目标元素的迭代器,找不到返回end(),如果寻找的对象是结构体,则需要重载==。

 vector <int>::iterator iElement = find(vecIntegerArray.begin(),
                       vecIntegerArray.end(),3);

单链表的创建与使用

参考:https://blog.youkuaiyun.com/chixujohnny/article/details/50900504
注意:头指针需要单独进行初始化并记录,但是释放内存不要释放两次。

#include <iostream>
using namespace std;
/* 创建一个单链表 */
struct ListNode{
    int m_key;
    ListNode* next;
};
void createList(ListNode* pHead){
    ListNode* p = pHead;
    for (int i = 1; i < 10; ++i) {
        ListNode* pNewNode = new ListNode;
        pNewNode->m_key = i; // 将新节点的值赋值为i
        pNewNode->next = NULL;
        p->next = pNewNode; // 上一个节点指向这个新建立的节点
        p = pNewNode; // p节点指向这个新的节点
    }
}
int main(){
    ListNode* head = NULL;
    head = new ListNode;
    head->m_key = 0;
    head->next = NULL;
    createList(head);
 	//释放指针
 	while(head != NULL){
 		ListNode* temp = head;
 		head = head->next;
 		delete temp;
 	}
    return 0;
}

eumn与int的相互转换

enum Color { red, white, blue}; 
  • enum转int

void f()
{
   Color x = red;
   Color y = white;
   Color z = blue;
 
   int n;
   n = x;   // change n to 0
   n = y;   // change n to 1
   n = z;   // change n to 2
}
  • int转enum

void f()
{
   Color x;
   x = red;      // change x to red
   x = Color(1); // change x to white
   x = Color(2); // change x to blue
   x = 2;        // compile-time error: can't convert int to Color
} 

pair的使用

参考:https://blog.youkuaiyun.com/sevenjoin/article/details/81937695
主要用法:


 pair<int, double> p1;
 p1 = make_pair(1, 1.2);
 
cout << p1.first << p1.second << endl;
 
//output: 1 1.2
 
int a = 8;
 
string m = "James";
 
pair<int, string> newone;
 
newone = make_pair(a, m);

通过tie获得元素值:

std::pair<std::string, int> getPreson() {
    return std::make_pair("Sven", 25);
}
 
int main(int argc, char **argv) {
    std::string name;
    int ages;
 
    std::tie(name, ages) = getPreson();
 
    std::cout << "name: " << name << ", ages: " << ages << std::endl;
 
    return 0;
}

数据类型的转换

使用stringstream进行所有数据类型的转换,需要#include 。注意在清空缓冲区时,不应该去调用clear。
具体用法如下:

#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main()
{
    char nzArr[10] = "aaa";
    string str1    = nzArr;
    int nNum       = 1111;
    string str2("12234");
    stringstream strStream(str2);//实例化对象并且初始化
    strStream.str("");           //使用str()清空缓冲的内存
    strStream << nNum;
    strStream >> nzArr;
    strStream >> str1;
    return 0;
}

笔试必掌握的algorithms头文件

技巧总结

参考:https://blog.youkuaiyun.com/qq_38410730/article/details/80943729
1、“去重”与“排序”
例如:输入11 10 20 40 32 67 40 20 89 300 400 15,输出10 15 20 32 40 67 89 300 400。
总结:将输入的数字或者字符串直接作为数组下标,自动的排序计数。

#include <iostream>
using namespace std;
 
int main() {
    int N, n;
    while (cin >> N) {
        int a[1001] = { 0 };
        while (N--) {
            cin >> n;
            a[n] = 1;
        }
        for (int i = 0; i < 1001; i++)
            if (a[i])
                cout << i << endl;
    }
    return 0;
}

2、输入与输出

int a;
while(cin >>hex>> a){
    cout<<oct<<a<<endl;
}

3、二进制数的转换

//求int型正整数1的个数
int input;
cin>> input;
int output = 0;
//求出所有的二进制数
while(input >0){
    //通过取余数,得到二进制的位数
    int bit = input %2;
    input = input/2;
    if(bit){
        output++;
    }
}
cout<<output<<endl;
题解:洛谷 P5686 [CSP-S 2019 江西] 和积和 等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。由于答案可能很大,你只需要给出答案模。仅一行一个整数表示答案模。本文分享的必刷题目是从。 阅读详情

相关推荐

[C++奥赛应用Cpp] - 提高C++编程技巧,实现奥赛应用

在奥赛中,一些问题可以使用拓扑排序来解决。例如,在一道题目中,你需要找到一组任务的顺序,使得每个任务在其前置任务之后执行。因此,对于一些常见的问题,我们应该有一些高效的算法和数据结构来解决它们。提高 C++ 编程技巧,在奥赛中获得更好的成绩!本文将介绍如何使用 C++ 编写实用的算法和数据结构,以及如何将它们应用于奥赛中。这个问题是找到一个数组的连续子数组,使子数组元素的和最大。这个问题可以使用 Kadane 算法,这是一个非常简单而又高效的算法。以上是我对 C++ 编程技巧在奥赛中的应用的介绍。

TechNovaX的博客 259

2015年第六届蓝桥杯JavaA组

第1题:熊怪吃核桃 森林里有一只熊怪,很爱吃核桃。不过它有个习惯,每次都把找到的核桃分成相等的两份,吃掉一份,留一份。如果不能等分,熊怪就会扔掉一个核桃再分。第二天再继续这个过程,直到最后剩一个核桃了,直接丢掉。 有一天,熊怪发现了1543个核桃,请问,它在吃这些核桃的过程中,一共要丢掉多少个核桃。 请填写该数字(一个整数),不要填写任何多余的内容或说明文字。 ——————————————————...

QinLaoDeMaChu的博客 1681

C#获取枚举Eumn的属性值,并绑定到控件

本项目中通过反射,封装了些方法,获取枚举的属性(描述信息)值,并将其绑定到控件显示,以及取得控件的当前枚举值。 此项目仅供初学者学习用。

路标设置(^_^)

作业

Chengjiahao1224的博客 454

数字加网(一)— —概念及分色合成

由于大多数图像复制设备是二值设备,因此在图像复制过程中,必须先把连续调的灰度图像或彩色图像处理成二值的半色调图像,用单位面积的网点覆盖率来表现图像的颜色深浅变化。这个过程被称之为加网(Screening) 数字加网就是根据人眼视觉的空间混色特性,用人眼无法分辨的细小黑白点的单位覆盖面积来模拟灰度图像或彩色图像的层次变化,使得到

Sin_Geek成长の迹 8591

ClickHouse集群扩容实战:用clickhouse-copier搞定数据迁移与分片重平衡

本文详细介绍了使用clickhouse-copier工具实现ClickHouse集群从3分片到5分片的平滑扩容实战。通过分片级并行处理、原子性保证等核心机制,该工具能高效完成数据迁移与分片重平衡,同时保持服务连续性。文章涵盖集群拓扑规划、表结构检查、迁移配置、执行监控及迁移后优化等关键步骤,为大数据量场景下的ClickHouse扩容提供完整解决方案。

weixin_29091837的博客 294

【算法每日一练]-二分类型 篇3 路标设置 ,跳石头

二分依据:该最短跳跃下需要搬走的石头数。二分依据: 该空旷指数下放的路标数。求:搬n个石头后的最短跳跃的最大值。求:放n个路标后的最小空旷指数。二分查找:对空旷指数进行二分。二分查找:对最短跳跃进行二分。

m0_69478376的博客 407

从Axure转Figma?这篇编组、缩放、圆角、评论的对比指南帮你无缝切换

本文为资深Axure设计师提供了向Figma无缝迁移的实战指南。文章深度对比了编组、缩放、圆角、评论等核心操作,重点解析了Figma独特的自动布局、组件系统和实时协作功能,旨在帮助用户快速适应新工具,实现设计思维与工作效率的跃迁。

tomato的博客 850

10个必学的matplotlib-cpp绘图技巧:C++数据可视化的终极指南

matplotlib-cpp是一个强大的C++绘图库,它封装了Python Matplotlib的功能,让C++开发者也能轻松创建高质量的数据可视化图表。无论你是数据科学家、工程师还是学生,掌握这些技巧都能显著提升你的数据展示效果!✨ ## 🎯 基础入门技巧 ### 1. 快速绘制简单折线图 matplotlib-cpp最简单的使用方式只需要几行代码。导入头文件后,直接调用plot函数传入数

gitblog_00349的博客 751

博科的SAN交换机基本操作

2、添加用户testuser赋予user权限可以访问1-128VF默认VF为128账号描述"Test user"密码为password123。1、创建zone别名(100是指当前设备Domain ID,1和2是指对应的index号)2,删除新接入设备的ZONE或保持ZONE配置一致。3、将zone添加到当前生效的CFG中。2、将zone添加到当前生效的CFG中。3、将zone添加到当前生效的CFG中。3,将添加的级联端口持续关闭。4、将当前zone生效。4、将当前zone生效。1、查看当前所有用户。

chenjunokok的博客 1837

MMRotate 详细使用教程

MMRotate 详细使用教程 做旋转目标检测,怎么可以不知道如何使用MMRotate呢! github链接: https://github.com/open-mmlab/mmrotate 1 安装 创建虚拟环境并激活 conda create -n mmrotate python=3.7 -y conda activate mmrotate 安装 PyTorch 和 torchvision conda install pytorch torchvision -c pytorch 注意:确保

Sylvia_Lan的博客 1万+

ElectronBot 舵机驱动方案深度解析:FM116B 凭什么扛住六自由度

桌面机器人动作一顿一顿、角度老是不听话?多半是驱动方案没选对。ElectronBot 靠一块巴掌大的 **ServoDrive** 驱动板搞定六个自由度,板上最小的那颗 **FM116B** 和一颗 STM32F042F6 就是闭环比的底座。 ## 项目与组件速览 ElectronBot 是个桌面级开源小机器人,头部主控 STM32F405 负责屏幕与 USB 通信,六个关节的舵机则各自挂一块

gitblog_00530的博客 674

【自动驾驶规划】Lattice Planner

Lattice Planner简介 LatticePlanner算法属于一种局部轨迹规划器,输出轨迹将直接输入到控制器,由控制器完成对局部轨迹的跟踪控制。因此,Lattice Planner输出的轨迹是一条光滑无碰撞满足车辆运动学约束和速度约束的平稳安全的局部轨迹。Lattice Planner的输入端主要由三部分组成,感知及障碍物信息、参考线信息及定位信息。局部规划模块的输出是带有速度信息的一系列轨迹点组成的轨迹,其保证了车辆控制器在车辆跟踪控制过程中的平稳性和安全性。 局部规划模块的输出是带有速

uytguytgf的博客 6491

如何用cpp-sort提升C++排序性能?5个实用技巧与最佳实践

cpp-sort是一个专注于提供高效排序算法及相关工具的C++库,通过灵活的接口设计和丰富的排序策略,帮助开发者在不同场景下实现最优排序性能。本文将分享5个实用技巧,带你快速掌握cpp-sort的核心功能,显著提升C++程序的排序效率。 ## 1. 选择最适合场景的排序算法 🚀 cpp-sort提供了数十种排序算法,每种算法都有其特定的适用场景。例如: - **pdq_sorter**:适用

gitblog_00930的博客 255

在最新版eclipse中配置使用AI AIcoder _AIcoder配置GPUSTACK使用_配置OLLAMA本地AI模型利用_集合---AI场景应用工作笔记

本文介绍了三款实用的编程辅助工具:一款便捷的反编译插件,可直接在插件市场安装使用;GitHub Copilot提供每月2000次代码补全和50条聊天记录的免费额度,支持智能代码提示功能;aicoder支持配置本地模型运行。这些工具都能有效提升开发效率,其中GitHub Copilot的智能补全功能尤为突出。

添柴程序猿的专栏 1231

ABAP Cloud:面向云时代的 ABAP 开发范式与实践指南

摘要: 本文系统讲解SAP ABAP Cloud开发模型,涵盖其架构、工具链、规范及实践。ABAP Cloud作为统一开发模型,支持在SAP BTP和S/4HANA上构建云就绪应用,遵循clean core原则,通过RAP(RESTful应用编程模型)实现低耦合扩展。文章详细解析其核心构成(RAP、稳定API、clean core约束)、工具链(ADT、软件物流)及两种典型扩展场景(on-stack与side-by-side),并附可运行RAP示例代码(如销售笔记应用)。重点强调通过规范开发确保系统可升级性

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 388

如何高效使用Godot-CPP:3个专业技巧实现C++高性能游戏开发

想要为你的Godot游戏项目注入C++级别的性能优势吗?今天我们将深入探讨**Godot-CPP**——这款专为Godot引擎设计的C++绑定库,它能帮助开发者轻松实现**C++高性能游戏开发**,让游戏性能不再是瓶颈。 ## 问题引入:为什么需要Godot-CPP? 许多Godot开发者在使用GDScript或C#开发游戏时,可能会遇到性能瓶颈。特别是在处理复杂物理计算、AI算法、图形渲染或

gitblog_00577的博客 422

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

C++ 包含Cpp技巧

编程环境:vc 6.0 近几天来,在写一个工程,用到了第三方的库文件xml文件 一般,我们都会直接把第三方文件添加到工程中,这样编译之后,就可以用了 不过,用了第三方文件,导致,vc在显示类的时候,添加了很多不必要的显示, 例如:你直接把文件添加到工程中,类视图里面,就会解析出很多第三方的 库函数,这样在编程的过程中,让我十分苦恼,后来,才发现可以直接 这样 #include 这

Safedebug的博客 1690

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

RedPanda-CPP调试技巧:如何监视全局变量

在RedPanda-CPP这个轻量级C++开发环境中,调试功能是开发者日常工作中不可或缺的一部分。许多用户在使用过程中发现,默认情况下调试器只显示局部变量,而全局变量需要特殊操作才能查看,这给调试工作带来了一定困扰。 ## 全局变量监视的必要性 在实际开发中,全局变量经常用于存储程序运行时的关键状态信息。当程序出现异常时,能够实时查看这些全局变量的值对于定位问题至关重要。特别是在多模块协作的大...

gitblog_07594的博客 372

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

掌握yaml-cpp内存管理:5个提升C++项目性能的实用技巧

yaml-cpp作为一款高效的C++ YAML解析器和发射器,其内部内存管理机制对项目性能有着直接影响。本文将深入探讨yaml-cpp中的内存优化技术,帮助开发者通过5个关键技巧提升C++项目的运行效率和资源利用率。 ## 1. 理解yaml-cpp的内存架构 yaml-cpp采用了高效的内存管理策略,通过查看[src/memory.cpp](https://link.gitcode.com/

gitblog_00520的博客 331

从理论到实践:如何通过CPP-Crash-Course快速掌握C++编程技巧

**CPP-Crash-Course**是一个专为C程序员设计的C++快速入门教程项目,提供从基础语法到高级特性的完整学习路径。这个开源项目通过实用的代码示例和清晰的解释,帮助开发者快速从C语言过渡到现代C++编程,掌握面向对象编程、模板、异常处理等核心概念。无论你是刚接触C++的新手,还是希望系统复习C++知识的开发者,这个项目都能为你提供有价值的参考。 ## 📚 项目概述与核心价值 CP

gitblog_00617的博客 493

C/CPP中的编程技巧及其概念

如果一个类需要自定义的拷贝构造函数、拷贝赋值操作符、析构函数中的任何一个,那么他往往同时需要三者。因为编译器生成的隐式定义的copy constructor和operator=语义是逐成员拷贝(memberwise)的,所以如果编译器生成的操作不能够满足类的拷贝需求(比如类成员是具有管理某种资源的句柄),使用编译器的隐式定义会具有浅拷贝,导致两个对象进入某种共享状态。A y;y=x;

轻口味的专栏 1549

PHP-CPP高级技巧:如何在C++中调用PHP函数与操作变量

PHP-CPP是一个强大的C++库,它允许开发者创建PHP扩展,实现C++与PHP之间的无缝交互。本文将分享如何在C++中高效调用PHP函数和操作变量的实用技巧,帮助开发者充分利用PHP-CPP的强大功能。 ## 快速了解PHP-CPP核心功能 PHP-CPP提供了直观的API,让C++开发者能够轻松与PHP生态系统交互。通过包含核心头文件[include/phpcpp.h](https://

gitblog_09258的博客 602

cpp-dependencies终极教程:从安装到实战的10个关键技巧

你是否正在寻找一个简单快速的C++依赖分析工具?cpp-dependencies正是你需要的终极解决方案!这个强大的工具能够自动分析C++项目中的`#include`依赖关系,并以GraphViz的`.dot`格式生成依赖图,帮助你轻松识别循环依赖、优化项目结构。在本篇完整指南中,我将分享10个关键技巧,让你从安装到实战全面掌握这个C++依赖分析神器。 ## 🚀 1. 快速安装与编译cpp-d

gitblog_00375的博客 978

DB-GPT 完整上手:用一句自然语言查询搞定智能数据分析

周五下午五点,老板在群里丢来一句:"明天要各门店的月度销售分析,带趋势图。"你打开数据库,导了几张表,写 SQL 对到七点,再用 Python 清洗、画图、排版,凌晨一点才把第一版报告发出去。这样的"取数-加工-出图"循环,几乎每个数据同学都经历过。DB-GPT 就是想终结这种苦力的开源项目:它是一个智能代理 AI 数据助手,你用自然语言提问,它自己写 SQL、跑代码、生成图表和 HTML 报告,

gitblog_00247的博客 857

RedPanda-CPP常见问题解答:新手必知的15个实用技巧

RedPanda-CPP是一款基于Qt的轻量级C/C++集成开发环境(IDE),为开发者提供快速、高效的编程体验。本文整理了15个新手必知的实用技巧,帮助你快速掌握这款强大工具的核心功能,提升编程效率。 ## 一、基础设置与界面优化 ### 1. 如何切换深色主题? RedPanda-CPP支持多种主题模式,通过以下步骤快速切换深色主题: **设置路径**:菜单栏「工具」→「选项」→「界面

gitblog_00073的博客 397
上一篇: Linux中GDB的使用(转载)
下一篇: 华为笔试刷题
陆标
博客等级 码龄9年 100粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值