目录

1. fstream中读取文件结束标志问题:

2. 关于数组定义时大小用变量的问题:

3. 读取文件时文件格式问题

4. 全局变量及命名空间中的全局变量

5. acos输入要求及输入精度问题

6. Win32中内存复制错误

7. C++贝塞尔函数

8. C++多线程中使用随机数需注意


1. fstream中读取文件结束标志问题:

eofbit:当文件中所有数据均被读取完毕且再次读取一次发现无数据时才为TRUE,即eofbit标志
上一次读取文件的操作是否失败
。当读取完最后一个数据时,此时eof()仍返回TRUE,只有再进行
一次读取操作,eofbit才置位,eof()才返回TRUE

EOF:文件最后一个数据的下一个位置为EOF数据,可通过peek()来判断下一个数据是否为EOF来判断文件是否读取结束,此方法更好

peek():预读文件下个位置的数据,但不影响文件内容,用此判断文件读取结束更好

正常读取结束

判断的文件数据数量比实际数量多1,用eof()进行判断应在读取之后,判断数据个数应在eof()之后

2. 关于数组定义时大小用变量的问题:

在项目属性里设置,这会在整个项目里生效,依次选择:属性->配置属性->C/C++ ->预处理器->预处理器定义

最后面直接加上:_CRT_SECURE_NO_WARNINGS

_CRT_SECURE_NO_WARNINGS此类警告非C++官方定义,而是VS内部自行定义的,VS认定某些方法存在安全隐患,故而设置此种不安全警告,通过上述方法可以取消此种警告

VS中在项目配置中修改预处理器限制,可实现

int a=10; int b[a];

此类代码,并且可正常运行相关程序。但此种用法与C++标准相违背,C++标准中在上述情况下数组大小不允许使用变量。此种方法为gcc相关扩展。

C++中数组使用栈内存,堆栈均在运行时分配内存,但栈大小有限,若使用变量,无法提前确定栈大小,变若量大小超出限制则栈空间不足,会导致数据覆盖的问题;常量大小有助于编译时确定栈大小。因此,不建议使用上述方法,动态数组使用动态分配即可,上述情况知道就行。

详细可参照:http://t.csdn.cn/vjfn9

3. 读取文件时文件格式问题

读取文件的方法有很多,但是需注意,在读取时一定要注意文件内容的存放格式,若为通常UTF-8,则无问题,但如果文件的内容是从其他软件复制过来,则可能会出现数据存放类型不同,从而导致使用UTF-8类型读取的代码无法正确读取其他类型的数据。(此时数据在txt中的显示均正常)如:

正常情况输出到文件中的存储类型(编码方式)为UTF-8,此时可正常读取

此处举例为matlab中复制过来的数据,编码为UTF-16 L,此时便无法正常读取

若文件中数据为matlab中直接写入文件,则类型相同,此处应该是显示时的格式不同,从而导致复制的结果格式也不同

注:文件路径中有中文时,打开文件可能会失败

4. 全局变量及命名空间中的全局变量

全局变量的定义建议放于cpp中(防止使用时出现重定义问题,放头文件中往往被包含不止一次,若头文件只被包含一次,则无问题),使用时需注意,全局变量的定义只能存在一份,而声明可以由多份

// a.cpp
int a = 1; // 定义// b.cpp
extern int a; // 声明// c.cpp
extern int a; // 声明

命名空间中的全局变量声明及定义与正常(全局命名空间下)的全局变量定义及声明使用方式相同,只不过相关代码需写在相关命名空间中

// a.cpp
namespace tjz
{int a = 1;
}// b.cpp
namespace tjz
{extern int a;
}

5. acos输入要求及输入精度问题

acos要求输入数据范围为[-1, 1],但在某些情况下入数据可能非常接近1或-1但精度上不是(例如:1.000000000457,此时输出结果在未显示多位小数情况下是1),从而导致结果计算错误显示nan。

此种问题不一定是中间计算过程有误,可能为精度导致的结果偏差从而使输入与-1和1不匹配。此时若确定输入无误只有精度问题时,可使用fmaxl和fminl或其他方法修改输入数据使数据保持在[-1, 1]之间。

其余函数可能存在类似问题,故在此提供一种思想。

6. Win32中内存复制错误

VS中若一数组或vector数据过大,则在Win32环境下内存中会出现复制错误,此时应更换为x64环境。(项目中遇见3G大小数据复制出现问题)

7. C++贝塞尔函数

相关贝塞尔函数存在于cmath头文件中,且输入类型不存在复数类型

第一类贝塞尔函数:

double cyl_bessel_j(double nu, double x);float cyl_bessel_jf(float nu, float x);long double cyl_bessel_jl(long double nu, long double x);

第一类修正贝塞尔函数:

double cyl_bessel_i(double nu, double x);float cyl_bessel_if(float nu, float x);long double cyl_bessel_il(long double nu, long double x);

第二类贝塞尔函数:

double cyl_neumann(double nu, double x);float cyl_neumannf(float nu, float x);long double cyl_neumannl(long double nu, long double x);

第二类修正贝塞尔函数:

double cyl_bessel_k(double nu, double x);float cyl_bessel_kf(float nu, float x);long double cyl_bessel_kl(long double nu, long double x);

8. C++多线程中使用随机数需注意

基本随机数使用方式:

#include <ctime>int main()
{srand((unsigned)time(NULL));// srand()中设置随机数种子,从而使得rand()中获得的随机数序列不同,种子默认为1// 故若不设置随机数种子,rand()函数每次获得的随机数序列相同// 一般采用当前系统时间作为种子,从而确保每次种子均不同// 采用srand(time(0))写法相同int ra = rand() % 10;return 0;
}
  • srand()在使用时一般只使用一次即可满足后续对随机数的需求,time的单位为1s
  • 若使用多次,则当程序运行速度过快时,在1s内重复执行多次srand函数,重新赋予相同种子,则会导致每次的随机数相同
  • 故一般应确保srand函数只运行一次

多线程中随机数使用方式:

#include <ctime>
#include <thread>void xiancheng()
{srand(time(0));int ra = rand() % 10;
}int main()
{thread th1(xiancheng);return 0;
}
  • 多线程中,srand需在每个线程内部重新使用
  • 在主线程中使用srand不会对子线程有影响,此时若子线程直接调用rand则相当于未调用srand,主线程中的srand只对主线程中rand起作用,每个子线程均需重新调用srand

多线程中多子线程随机数种子相同解决方案:

#include <ctime>
#include <thread>
#include <windows.h>void xiancheng()
{LARGE_INTEGER nStartCounter;QueryPerformanceCounter(&nStartCounter);srand((unsigned)nStartCounter.LowPart);int ra = rand() % 10;
}int main()
{thread th1(xiancheng);thread th2(xiancheng);thread th3(xiancheng);return 0;
}
  • 多子线程随机数种子相同的原因是:多个线程在1s内同时产生从而导致time(0)读取到相同的时间 
  • time(0)单位为1s,故而使用毫秒或微秒级的时钟即可解决此类问题,上诉代码只是一种方案,其余能获得更高精度时钟的方法具有相同效果

C++相关问题笔记(一)相关推荐

  1. Markdowm常用公式及相关符号笔记

    Markdowm常用公式及相关符号笔记 1. 带帽符号 2. 希腊字母 3. 常用字体 4. 逻辑运算符号 4.1 逻辑推理 4.2 二元运算符 4.3 几何运算符 4.4 省略号 5. 函数公式等 ...

  2. Spring中RedisTemplate方法中,redis相关操作笔记。[redis生成指定长度自增批次号,删除、设置过期时间等]

    Spring中RedisTemplate方法中,redis相关操作笔记. redis获取自增批次号 // opsForValue()生成long UUID = redisTemplate.opsFor ...

  3. 软考高项之相关公式笔记

    软考高项之相关公式笔记 一.成本管理 1.折现率和折现系数: 2.净现值 3.投资回收期 4.投资收益率 二.成本计算类 三.其他公式及概念 一.成本管理 1.折现率和折现系数: 若n年后能收入F元, ...

  4. 深度学习总结——CS231n课程深度学习(机器视觉相关)笔记整理

    深度学习笔记整理 说明 基本知识点一:模型的设置(基本) 1. 激活函数的设置 2. 损失函数的设置 (1) 分类问题 (2) 属性问题 (3) 回归问题 3. 正则化方式的设置 (1) 损失函数添加 ...

  5. 【学习笔记】【Design idea】一、Java异常的设计思想、性能相关、笔记

    1.前言: 异常.本该是多么优雅的东西,然而,得全靠自己在零散的信息中汇集. 学习笔记保持更新. 2.教材(参考资料) 其他 ①受检异常与非受检异常:https://www.cnblogs.com/j ...

  6. Spring系列(十三):AOP相关知识笔记

    今天给大家分享AOP相关的知识,希望对大家能有所帮助! 1.AOP定义 AOP全称为Aspect Oriented Programming,中文含义为:面向切面编程. 通过预编译方式和运行期动态代理实 ...

  7. SQLServer子查询相关知识笔记

    今天给大家介绍以下SQLServer子查询相关知识,希望对大家能有所帮助! 1.子查询概念介绍 子查询可以嵌套在SELECT.INSERT.UPDATE.DELETE语句或其他子查询语句中的查询,子查 ...

  8. 数据库系统故障相关知识笔记

    数据库系统中可能发生的故障主要包括事务故障.系统故障.介质故障.计算机病毒等.下面给大家简单整理一下相关的故障知识笔记. 1.事务故障 事务故障是因为程序执行错误而引起的非预期.异常终止的故障.主要有 ...

  9. 事务管理基础:数据库的并发控制相关知识笔记

    1.并发操作的概念介绍 并发操作主要是指在多用户共享的系统当中,可能存在很多用户同时对同一个数据进行操作.并发操作会造成丢失更新.不可重复读.读脏数据.主要原因是事务的并发操作破坏了事务的隔离性. 2 ...

  10. 系统开发基础:UML中图的相关知识笔记(下)

    1.状态图 状态图展现了一个状态机,它由状态.转换.事件.活动组成.状态图关注系统的动态视图,它对于接口.类.协作的行为建模尤为重要,它强调对象行为的事件顺序. 组成:简单状态.组合状态.转换(事件和 ...

最新文章

  1. 在WPF应用程序中利用IEditableObject接口实现可撤销编辑的对象
  2. python 量化交易_Quantsrat让R语言像Python一样进行策略回测和量化交易
  3. Linux中的文件搜索 locate,find,grep ,whereis和which命令的使用
  4. Windows 8.1 Windows Phone 开发环境安装遇到的问题
  5. 二十八种未授权访问漏洞合集(暂时最全)
  6. libSM.so.6: cannot open shared object file: No such file or directoryapt-file search libSM.so.6
  7. C++ 鼠标乱动整人代码
  8. 一元四次方程的求根公式
  9. 高并发系统负载均衡与实时监控的实用方案
  10. c++读xml文件 MSXML
  11. 环境光照IBL(Image-Based Lighting)
  12. 湖南大学的计算机网络,林亚平-湖大信息科学与工程学院
  13. 044-Web前端-JS-键盘事件
  14. 财务软件性能测试要求,财务报表性能测试总结 - 泊 涯 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
  15. 系统wmiprvse.exe占用CPU非常高,求解决
  16. 星载SAR成像处理——轨道根数
  17. 直通转发(cut-through)和存储转发(store-and-forward)的区别
  18. android开源组件化框架,轻量级Android组件化协议框架 – Android-Route...
  19. 树状数组(oj1978 1979)
  20. Amazon Dynamo系统架构

热门文章

  1. 牛客网利用C语言解兔子序列
  2. 2022年,谁在推动音视频产业的新拐点?
  3. 验房师丨验房项目以及验房整改建议
  4. android其实很简单 -- roaster 以代码构建代码
  5. Reggie外卖项目 —— 开发环境搭建
  6. php 获取用户是否关注微信公众号
  7. SSD算法详解 及其 keras实现 (下)
  8. 日拱一卒,集小胜为大胜; 学以致用,在战争中学习战争;
  9. 【双十一前专访手机淘宝技术小二南天】技术就要左右互博,耗尽一切能量
  10. 计算机音乐设备简单配置,计算机音乐与作曲基础(高等学校艺术类专业计算机规划教材)...