取名太麻烦了
码龄5年
关注
提问 私信
  • 博客:56,854
    56,854
    总访问量
  • 34
    原创
  • 2,009,754
    排名
  • 2
    粉丝
  • 0
    铁粉
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:江苏省
  • 加入CSDN时间: 2019-07-27
博客简介:

inoobkk的博客

查看详细资料
个人成就
  • 获得45次点赞
  • 内容获得27次评论
  • 获得102次收藏
  • 代码片获得162次分享
创作历程
  • 4篇
    2023年
  • 30篇
    2021年
  • 3篇
    2020年
成就勋章
TA的专栏
  • linux内核学习记录
  • typescript编译器源码学习
  • C++ IQ--
    14篇
  • c++ primer11学习记录
    12篇
  • STL源码剖析学习记录
    4篇
兴趣领域 设置
  • 人工智能
    opencv计算机视觉深度学习自然语言处理
创作活动更多

AI大模型如何赋能电商行业,引领变革?

如何使用AI技术实现购物推荐、会员分类、商品定价等方面的创新应用?如何运用AI技术提高电商平台的销售效率和用户体验呢?欢迎分享您的看法

175人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

ubuntu20.04搭建opengl开发环境并运行第一个程序

参考《opengl编程指南》第四版。
原创
发布博客 2023.04.17 ·
580 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

linux下tcp服务端与客户端实现

使用socket完成linux下服务端与客户端的编写,传输层使用tcp协议,服务端使用多进程实现并发。
原创
发布博客 2023.02.26 ·
627 阅读 ·
1 点赞 ·
0 评论 ·
3 收藏

zlib压缩原理

zlib压缩算法讲解,包括lz77算法和huffman编码
原创
发布博客 2023.02.18 ·
4754 阅读 ·
2 点赞 ·
1 评论 ·
15 收藏

c++函数指针进阶

c++成员函数指针调用
原创
发布博客 2023.02.13 ·
419 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

记录一次leveldb安装失败经历

最近准备学习leveldb的源码,在安装时出现了一些问题按照官方的安装步骤,在执行以下的命令时遇到了错误cmake -DCMAKE_BUILD_TYPE=Release .. && cmake --build .找到出错的第一个位置error: ‘is_trivially_copy_constructible’ is not a member of ‘std’经搜索,发现这是由于gcc/g++的版本过低导致。参考链接。因此升级gcc和g++的版本,参考链接..
原创
发布博客 2021.08.18 ·
781 阅读 ·
0 点赞 ·
1 评论 ·
0 收藏

c++ const_cast转换运算符与volatile关键字

const_cast转换运算符用来去除变量的底层const属性,这里的变量的类型是指针或者引用类型,因为普通类型并没有底层const属性这个说法。const_cast使用实例:代码转自:IT男汉:C++ const_cast用法#include<iostream>using namespace std;void ConstTest1() { const int a = 5; int *p; p = const_cast<int*>(&a); (*p)..
原创
发布博客 2021.07.27 ·
537 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

c++列表初始化为什么更快

列表初始化是给数据成员分配内存空间时就进行初始化,就是说分配一个数据成员只要冒号后有此数据成员的赋值表达式(此表达式必须是括号赋值表达式),那么分配了内存空间后在进入函数体之前给数据成员赋值,就是说初始化这个数据成员此时函数体还未执行。...
原创
发布博客 2021.07.14 ·
193 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

关于STL中value_type函数的思考

// 摘自stl_iterator_base.htemplate <class _Iter>inline typename iterator_traits<_Iter>::value_type*__value_type(const _Iter&){ return static_cast<typename iterator_traits<_Iter>::value_type*>(0);}《STL源码剖析》上说的是value_type这.
原创
发布博客 2021.07.12 ·
1199 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

关于vector容器的deallocator的思考

从STL源码剖析这本书上得到的vector容器的deallocate函数如下:void deallocate() { // 释放所有的分配的内存,为重新开辟一大段空间做准备,因为vector要求连续的数组 if (start) { data_allocator::deallocate(start, end_of_storage - start); } }这段代码看起来很合理,就是释放[start, end_of_storage)这一段内存空间。现在继续看data_allocato
原创
发布博客 2021.07.09 ·
722 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

关于STL中空间配置器中free_list的理解

freeList是一个元素类型为obj*的数组,freeList[i]代表着一串内存区块链表(注,为了方便说明,把这里的一大块空间称为一个链表,因为它有着与链表类似的表现形式,为了更好的突出链表的形式,上图中的两个区块没有连接在一起。实际上这一块空间是连续的,而链表中的两个节点在内存上不一定是连续的,需要注意)的首地址,每串区块的区块大小是不同的。假设freeList[0]代表一串区块大小为8的区块串,则它有可能是如下的形式可以看出,在一个区块链表中,每两个obj 对象之间的首地址的差值为一个区块的
原创
发布博客 2021.07.07 ·
2684 阅读 ·
0 点赞 ·
3 评论 ·
0 收藏

spawn-fcgi: child exited with: 127可能的原因

第一种是动态链接库的问题,请参考https://blog.csdn.net/lucky_huijun/article/details/105165359第二种是没有正确的输入路径名,下面这样的是错误的spawn-fcgi -a 127.0.0.1 -p 9001 -f a.out正确的应该是spawn-fcgi -a 127.0.0.1 -p 9001 -f /a.out如果是第二种错误就打自己一巴掌吧^_^...
原创
发布博客 2021.07.06 ·
462 阅读 ·
1 点赞 ·
4 评论 ·
0 收藏

c++ primer 9.37为什么list或array没有capacity成员函数

vector容器是有capacity成员函数的,原因是vector需要支持通过索引对元素的随机存取功能,因此需要分配一块地址连续的内存空间,由于push_back()这样的操作,如果在push_back()操作时为新元素分配空间,则不能保证此时分配的空间与先前的空间是地址连续的,如果为已有的元素和现在新加入的元素重新分配一块连续的空间,再进行拷贝,则十分缓慢。综上,vector在实现时总是会多分配一些空间,作为预留的空间。回归正题,由于list不要求对元素的随机存取,因此不用额外分配空间,也就没有cap
原创
发布博客 2021.07.04 ·
303 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

c++ primer9.32

网上的解释为:参考链接:链接不过我试了下,下面的代码是可以的,暂时不知道原因#include <iostream>#include <string>#include <vector>#include <list>#include <deque>#include<forward_list>using namespace std;int main(){ vector<int> vi = {
原创
发布博客 2021.07.04 ·
122 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

forward_lsit的erase操作为什么是删除指定的迭代器之后的元素

问题描述:在forward_list的这个容器中,没有erase接口,只提供了erase_after这个接口。其中erase _after(p)为删除迭代器p指向的位置之后的一个元素。那么为什么不能直接删除当前迭代器指向的元素呢。首先找到STL中slist.h,可以看到iterator erase_after(iterator __pos) { return iterator((_Node*) this->_M_erase_after(__pos._M_node)); }于是
原创
发布博客 2021.07.04 ·
165 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

vector的erase函数的陷阱

在下面的代码中,我试图用erase删除vector中的所有值为偶数的元素。根据c++primer 11,erase的返回值是指向被删除元素之后元素的迭代器。根据我的想法,我认为既然是删除一个元素,那么该被删除元素之后的所有元素都会往前移动一个位置,因此在删除该元素后,指向该被删除元素的迭代其器变成指向下一个元素的迭代器,但是却出现了错误。晚上的解答是使用erase(p)之后,p变为无效状态。#include <iostream>#include <string>#incl.
原创
发布博客 2021.07.02 ·
243 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

c/c++判断字节序类型

代码来自《Linux高新能服务器编程》#include<stdio.h>void byteorder(){ union { short value; // short为2个字节,共16位 char union_bytes[sizeof(short)]; }test; test.value = 0x0102; if((test.union_bytes[0] == 1) && (test.union_bytes[1]==2)) { printf("b
原创
发布博客 2021.06.10 ·
274 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

c语言strcat函数

头文件:#include<string.h>功能:连接两个字符串函数原型:char *strcat(char *dest, const char *src);注意事项:dest需要足够大的空间容纳拼接后的字符串代码示例1:错误的用法,空间分配不足#include<iostream>#include<vector> #include<string.h>#define _CRT_SECURE_NO_DEPRECATE // vs2017中屏蔽警告
原创
发布博客 2021.06.09 ·
308 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

c++ 中auto与decltype

#include<iostream>using namespace std;int main(){ const int i = 42; auto j = i; j = 1; cout<<j<<endl; // auto一般会忽略顶层const const auto &k = i; // 明确指定为顶层const //k = 1; // k是const引用 auto *p = &i; // p的类型.
原创
发布博客 2021.05.29 ·
147 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

重载赋值运算符时为什么需要返回引用类型?

c++ primer P492:赋值运算符的行为与复合版本(什么是复合版本)的类似,左侧运算对象和右侧运算对象的值相等,并且运算符应该返回它左侧运算对象的一个引用。疑问:为什么要返回左侧运算对象的引用,返回它的拷贝不行?参考其他人的博客:Jessica要努力了。。:c++赋值运算符为什么要返回引用?做出以下的总结:重载赋值运算符时不一定非得返回左侧运算对象得拷贝,但是如果不这样做出错的风险会加大。当类没有指针类型的成员时返回左侧对象拷贝不会出错,代码如下:Test.h#pragma once
原创
发布博客 2021.05.17 ·
1769 阅读 ·
6 点赞 ·
2 评论 ·
18 收藏

移动构造函数和拷贝构造函数的匹配规则

参考c++ primer第五版的StrVec类拷贝构造函数是StrVec::StrVec(const Strvec& s){...}移动构造函数是StrVec::StrVec(Strvec&& s) noexcept {...} 疑问:在初始化时是如何选择拷贝构造函数和移动构造函数的如StrVec s; // 使用默认构造函数初始化StrVec s1(s); // 这里调用拷贝构造函数还是移动构造函数?答案:c++ primer第五版477页如果一个类既有拷
原创
发布博客 2021.05.15 ·
248 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏
加载更多