c++
折花刀
勤能补拙是良训,一份辛苦一份才
展开
-
Lambda表达式用作模板函数的参数
在这个示例中,ProcessData是一个模板函数,其中第二个参数Func是一个函数对象类型。在main函数中,我们创建一个Lambda表达式[](int x) { return x * 2;},并将其作为第二个参数传递给ProcessData模板函数。// 使用Lambda表达式调用模板函数。原创 2024-05-23 16:50:45 · 234 阅读 · 0 评论 -
函数重载和模板之间的区别
C++ 中的函数重载和模板之间最重要的区别之一是模板不能接受不同数量的参数,但重载函数可以接受不同数量的参数。原创 2024-05-20 20:13:52 · 116 阅读 · 0 评论 -
能不能定义一个std::string(“helloworld“)再返回其 c_str()?
不可以。这是因为当你创建一个局部的std::string对象并从函数中返回其c_str()时,std::string对象在函数返回后会被销毁,它的析构函数会释放其占用的内存。这将导致返回的const char*指针指向一块已经被释放的内存,从而产生悬挂指针和未定义行为。原创 2024-05-18 10:12:58 · 331 阅读 · 0 评论 -
如何理解移动语义的?移动一个int会不会将其置0?
对于基本数据类型,如int,实际上不存在“移动”的操作。int是一个简单的值类型,不涉及动态资源管理。移动一个int和复制它效果相同,都是简单的值复制。移动操作不会改变原始int值,也就是说,移动一个int并不会将其置为0。移动语义主要针对那些管理动态资源的复杂对象,对于简单的值类型并没有意义。原创 2024-05-18 10:10:57 · 346 阅读 · 0 评论 -
使用make_shared构造shared_ptr和先new再置入哪个好?好在哪?
在单个操作中分配内存,同时为对象和其引用计数分配空间,减少了一次内存分配和释放的开销。分配一块足够大的内存,用来存储对象本身和控制块(包括引用计数和弱引用计数)。在构造过程中可能因为异常导致内存泄露,而。在分配得到的内存上构造对象,构造控制块。避免了这个问题,因为它只有一个操作。能以更简洁的代码完成同样的工作。返回指向新构造对象的。原创 2024-05-18 10:07:58 · 394 阅读 · 0 评论 -
std::move一个const对象
类型,这意味着移动构造函数或移动赋值操作符无法应用于这个对象,因为它们通常要修改源对象,而。本身只是将对象的类型转换为右值引用,使得可以使用移动语义。对象的结果,通常会退化到使用拷贝构造或拷贝赋值,就像没有使用。修饰符强制性地从该对象中移除来实现,方法是使用。,即便转换为右值引用,依然会被视为。的语义,可能会引发未定义的行为。对象实际上不会移动该对象。但需要注意,这样做会违反。原创 2024-05-18 10:05:48 · 369 阅读 · 0 评论 -
构造函数不能声明为虚函数
构造函数的调用是静态绑定的,即在编译时确定的,而不是动态绑定的,因此构造函数不能是虚函数。因为在对象构造过程中,虚函数表还没有被构造完毕,无法实现动态绑定的特性。原创 2024-03-09 15:55:44 · 423 阅读 · 0 评论 -
c++11支持使用范围初始化的容器
unordered_map需要用pair初始化。原创 2024-02-24 16:01:57 · 319 阅读 · 0 评论 -
指向派生类的基类指针、强转为 void* 再转为基类指针、此时调用虚函数会发生什么(正常)?
3,调用虚函数:如果这个基类中的虚函数在派生类中被覆盖(override),那么在运行时,由于编译器在转换回基类指针时假定这个指针指向的是基类对象,因此调用虚函数时会根据基类的虚函数表来确定调用哪个函数。这意味着即使实际上这个指针指向的是派生类对象,也会调用基类中的虚函数实现,而不是派生类中的实现。类型的指针转换回基类指针时,编译器会进行一次静态类型转换。这意味着编译器会假定这个指针是指向基类对象的,而不考虑它原本指向派生类对象。类型时,指针的类型信息会丢失,但指针仍然指向原来的对象。原创 2024-02-08 10:16:51 · 456 阅读 · 1 评论 -
子类将基类的虚函数替换为其自己的虚函数,共用的一个虚函数表,怎么不影响基类
如果该指针指向一个派生类对象,那么派生类的虚函数地址就会被调用,而如果指向一个基类对象,那么基类的虚函数地址就会被调用,这个过程与实际的虚函数表是如何维护无关。如果派生类对虚函数进行了重新定义,那么它会生成一个新的子类虚函数表,并且把不同的虚函数地址填入其中,从而覆盖了基类虚函数表中对应的虚函数地址。每个类对象都含有一个指向其虚函数表的指针,实际上,这个指针指向的是该类的虚函数表,也就是说,所有该类对象的虚函数指针指向该虚函数表。所以,操作派生类对象不会污染基类的虚函数表,它们之间的虚函数是完全独立的。原创 2024-02-08 10:12:41 · 361 阅读 · 0 评论 -
C++多态,父类有virtual, 子类继承时, 会拷贝父类的虚函数表吗
子类的虚函数表会继承父类的虚函数表,并添加自己新增的虚函数。在 C++ 中,在父类中声明的虚函数会在子类中被继承,并且子类中所生成的对象如果重写了父类中的虚函数,其虚函数表将被更新以指向重写后的函数地址。因此,子类不需要再次拷贝一份父类的虚函数表,可以直接继承父类的虚函数表。如果子类覆盖了父类的虚函数,则子类的虚函数表会被更新,以指向重写后的函数地址,而不是父类的函数地址。因此,子类不需要拷贝一份父类的虚函数表,虚函数表的继承和更新是由编译器完成的。原创 2024-02-07 16:29:20 · 369 阅读 · 0 评论 -
std::function与回调函数的区别
同时std::function也更加通用,你可以用其存储任何可以被调用的对象(callable object),只要有正确的函数签名即可。利用std::function你不但可以保存一段代码,同时也可以保存必要的上下文,然后在合适的地方基于上下文调用这段代码。,这里的上下文就是指代码依赖的数据,你不得不自己动手构造出一个结构体用来存储代码依赖的上下文。std::function的作用本质上和我们刚才定义的结构体区别不大。,就是因为函数指针没有办法捕捉this(指向对象的指针)这个上下文。原创 2024-02-07 14:36:21 · 400 阅读 · 0 评论 -
返回数字字符串所有有效IP地址
使用一个循环来尝试不同长度的整数,同时确保整数的值在 0 到 255 之间。例如,如果以 0 开头的整数只能是 0,不能是 01 或 001 等。作为输入,并返回一个字符串向量,表示所有可能的有效 IP 地址。,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在。如果已经遍历完整个字符串,并且已经找到了 4 个整数,则将结果加入到结果集中。如果剩余字符数太多或太少,无法凑成一个 IP 地址,则不再继续搜索。这个算法的时间复杂度是 O(1),因为 IP 地址的长度是固定的。原创 2024-01-04 09:14:22 · 494 阅读 · 0 评论 -
迭代器失效及解决办法
对于vector来说,如果使用普通迭代器(例如std::vector<int>::iterator)进行遍历和删除操作,当你删除一个元素后,后面的元素会向前移动填补空缺,导致当前迭代器指向的位置已经不再有效。因为在删除某个键值对后,其他键值对的位置可能发生变化,导致当前迭代器无法正确指向下一个要访问的元素。注意:C++11 引入了范围循环 for-each,但不适用于在迭代过程中删除元素的情况,因为它使用的是临时迭代器并不允许修改容器。当使用迭代器遍历容器并删除元素时,迭代器可能会失效。原创 2023-12-09 12:44:53 · 678 阅读 · 0 评论 -
类的静态成员不可以在初始化列表初始化
/初始化静态的私有成员,尽管是私有的,但c++依然允许这样使用。//什么都不做的构造函数。//什么都不做的析构函数。原创 2023-12-04 21:25:03 · 453 阅读 · 0 评论 -
CRTP静态多态
最后,在main()函数中,创建了Derived1和Derived2的实例,并调用它们的foo()函数。在这个示例中,定义了一个模板类Base,模板类中包含函数foo_function(),并使用模板参数Derived作为类型参数。CRTP使用一个模板类作为基类,派生类中,使用基类的模板参数作为派生类的类型参数,从而实现了静态多态。由于使用了CRTP技术,因此在编译时就能够确定foo_function()函数的具体实现,从而避免了动态多态带来的运行时开销。原创 2023-11-25 16:52:55 · 470 阅读 · 0 评论 -
虚函数表结构
原创 2023-11-25 16:39:08 · 359 阅读 · 0 评论 -
虚函数表生成时机&存储位置
动态多态:运行时多态,父类指针的指向,如果指向的是基类就去基类的虚函数表找相关函数接口,如果指向子类,就去子类的虚函数表找。(浅拷贝和深拷贝,浅拷贝时两个对象的虚函数指针相同,如果一个对象释放了,会导致另一个对象的虚函数表指针丢失)编译时,并不知道每个类会创建多少个对象,所以虚函数表是与类相关的,一个类对应一个虚函数表。3、继承时:如果没有重写,就会复制父类的,发生重写时,就将重写后的虚函数地址进行替换。不同对象的虚函数表指针不一样,但是指向的地址是一样的。.data:初始化的全局变量,静态变量。原创 2023-11-25 10:22:02 · 555 阅读 · 0 评论 -
C++ 构造函数&拷贝构造函数&赋值构造函数&移动构造函数总结
C++真的让人头大,这么多种类的构造函数构造函数:不解释拷贝构造函数:用一个已存在的对象初始化一个不存在的对象赋值构造函数:用一个“已存在”的对象初始化另一个“已存在”的对象参考:https://blog.csdn.net/zcyzsy/article/details/52132936移动构造函数:把一个对象的资源转一个另一个对象(浅拷贝)参考:http://c.biancheng.net/view/7847.html(这里只做总结,详细请看参考链接)...原创 2021-08-15 16:24:22 · 146 阅读 · 0 评论 -
boost::bind成员函数创建线程的实例
参考自:http://blog.sina.com.cn/s/blog_d01f29a10101m9et.html因为之前在项目中经常见这种写法,一直不理解,现在把这个写出来方便学习根据相关资料bind参数分别是:1,传入类成员函数指针;2,类对象指针classHelloWorld { public: voidhello(); voidentry(); }; voidHelloWorld::hello() { ...转载 2021-08-15 11:55:28 · 430 阅读 · 0 评论 -
[leetcode]1116. 打印零与奇偶数(条件变量C++)
classZeroEvenOdd{private:intn;mutexm_mutex;condition_variablem_cnv;boolm_zero;//打印0boolm_odd;//打印奇数public:ZeroEvenOdd(intn){this->n=n;m_zero=true;m_odd=true;...原创 2021-07-31 16:28:54 · 219 阅读 · 0 评论 -
leetcode:Z 字形变换(C++)
classSolution{public:stringconvert(strings,intnumRows){intlength=s.length();intindex=0;stringstr_out;if(numRows==1||length<=numRows)returns;else{intinterval=0;...原创 2021-07-29 00:12:27 · 167 阅读 · 0 评论 -
QComboBox多选功能实现类
//头文件#ifndef MULISELCOMBOX_H#define MULISELCOMBOX_H#include <QWidget>#include <QComboBox>class QListWidget;class QLineEdit;class MuliSelCombox : public QComboBox{ Q_OBJECTp...原创 2019-11-07 10:25:42 · 2149 阅读 · 2 评论 -
Mysql插入数据时对特殊符号的处理
//对特殊符号的处理 value.replace("\\","\\\\"); value.replace("'","\\'"); sSql += "'" + value + "',";原创 2019-10-15 11:06:03 · 2068 阅读 · 0 评论 -
c++ 判断输入的一个double数的每一位是不是阿拉伯数字
c++ primer plus 编程练习题, 第六章 第二题原创 2017-01-06 16:57:00 · 1263 阅读 · 0 评论 -
求两个QStringList的交集
//求两个QStringList的交集,结果保存再第一个参数中void CommonFunc::getQStringListIntersect( QStringList& commonColumns, QStringList& currentColumns ){ if( commonColumns.count() == 0 || currentColumns.coun...原创 2019-04-25 16:49:19 · 2869 阅读 · 0 评论 -
给QTableView设置宽度出错:ASSERT: "visual != -1" in file itemviews\qheaderview.cpp, line 1254
原因是:必须先给TableModel中添加数据,再设置宽度原创 2019-04-29 11:17:09 · 2083 阅读 · 0 评论 -
QTableView(QAbstractTableModell)添加多选框
1,界面:2,代码结构:3,tablemodel.h/* @brief 表模型类 * * 通过继承QAbstractTableModel实现表格的MVC模型 * * @author zhaoyong */#ifndef TABLEMODEL_H#define TABLEMODEL_H#include <QAbstractTableModel>...原创 2019-04-26 14:12:29 · 1622 阅读 · 1 评论 -
重载QDialog的accept()实现达到某种条件后再关闭QDialog对话框
void Add_Modify::accept() //Add_modify继承自QDialog{ QTableWidget* tableWidget = getTableWidget(); int nRow = tableWidget->rowCount(); QStringList insertValue; for(int i = 0; i <...原创 2019-03-28 20:47:48 · 3221 阅读 · 1 评论 -
有效的设置QTableWidget/QTableView的表头不会因为鼠标点击选中而变色
ui->tableWidget->horizontalHeader()->setStyleSheet( "QHeaderView::section {background-color:white; border:none; border-right:1px solid gray;}");ui->tableWidget->horizontalHeader()->...原创 2019-03-28 10:19:05 · 7091 阅读 · 0 评论 -
QTableWidget动态添加QComboBox并获取表格单元的Widget类型
//QTableWidget获取表格单元的Widget类型auto test = (tableWidget->cellWidget(rowNum, 1));qDebug() << test->metaObject()->className();//给QTableWidget添加QComboBoxQComboBox *comboBox = new QCom...原创 2019-04-01 15:51:18 · 4554 阅读 · 0 评论 -
Qt窗口拆成两个Widget分别添加不同的Ui文件
//前提是主窗口已经添加了两个Widget//Ui文件可以是在同一个工程中添加,也可以添加外部工程的ui文件(包括.h和.cpp)#include "mainwindow.h"#include "ui_mainwindow.h"#include "dialog.h" //ui的头文件#include "widget.h" //ui的头文件MainWindow::MainW...原创 2019-03-07 13:36:31 · 2262 阅读 · 0 评论 -
Qt 旋转等待加载类
//***************************************头文件*************************************#ifndef KBDWAITPRGDLG_H#define KBDWAITPRGDLG_H#include <QDialog>#include <boost/shared_ptr.hpp>#inclu...原创 2019-06-24 11:46:57 · 1376 阅读 · 0 评论 -
QDir获取某个路径下所有子目录的文件总数
int fileCount = 0;bool getFileCount( const QString& sPath ){ QDir dir( sPath ); QFileInfoList fileInfoList = dir.entryInfoList(); foreach ( QFileInfo fileInfo, fileInfoList ) {...原创 2019-06-28 08:29:01 · 2388 阅读 · 0 评论 -
QTreeWidget屏蔽双击展开折叠树节点
1,class MyTreeWidget : public QTreeWidget2,MyTreeWidget::MyTreeWidget(){ //屏蔽双击事件对树节点展开的影响 this->setExpandsOnDoubleClick(false);}原创 2019-07-05 11:03:06 · 6444 阅读 · 0 评论 -
MySQL LEFT JOIN INNER JOIN实例
SELECT KEY_ID_TAG,accuml_map_to_fes.DESCRIPTION,accuml_map_to_fes.RTU_TAG,accuml_map_to_fes.DOT_NO, fes_accuml.TAG_NAME, fes_accuml.DESCRIPTION,fes_dev_info.TAG_NAME,fes_dev_info.DEV_DESC FROM accum...原创 2019-08-06 10:13:32 · 331 阅读 · 0 评论 -
QStandardItemModel/QTreeView实现多选框多级联动
void KbdDevListDlg::onItemChanged(QStandardItem* item){ disconnect(m_modelDevInst,SIGNAL(itemChanged(QStandardItem*)),this,SLOT(onItemChanged(QStandardItem*))); //修改子节点状态 changeChildsSt...原创 2019-08-14 17:04:41 · 1329 阅读 · 0 评论 -
windows C++多线程实例(一个线程不停加/另外一个线程不停减,第三个线程进行判断挂起/恢复加线程/减线程)
#include "stdafx.h"#include <Windows.h>#include <iostream>using namespace std;HANDLE hThread;HANDLE hThread2;HANDLE hThread3;DWORD WINAPI FirstThread(PVOID pvParam) { int* value...原创 2019-08-16 10:29:00 · 358 阅读 · 0 评论 -
c++ 常用简单正则表达式
"^[1-9]*[1-9][0-9]*$" 整数"^(-?[0-9]+)(\\.[0-9]+)?$" 浮点数"((2(5[0-5]|[0-4]\\d))|[0-1]?\\d{1,2})(\\.((2(5[0-5]|[0-4]\\d))|[0-1]?\\d{1,2})){3}" IP地址"(?!0|1|2|3|4|5|6|7|8|9)^.*$" 不以数字开头的字符串//Qt...原创 2019-09-18 11:12:17 · 404 阅读 · 0 评论 -
QT中使用BOOST
1,将boost的头文件夹拷贝到工程路径,我放到/root/study下2,pro文件中添加如下几行#关闭BOOST的自动连库DEFINES += BOOST_ALL_NO_LIB=1#BOOST使用动态库DEFINES += BOOST_ALL_DYN_LINK=1#编译器找头文件的路径INCLUDEPATH += /root/study#动态库LIBS += -lboost...原创 2019-02-28 15:46:51 · 4130 阅读 · 0 评论