C++相关闲碎记录(1)

1、C++绘制爱心图像

#include <iostream>
#include <cmath>using namespace std;int main() {// 心形曲线公式 (x^2 + y^2 - a)^3 - x^2*y^3 = 0double a = 1;double bound = 1.5 * sqrt(a);double step = 0.05;for (double y = bound; y >= -bound; y -= step) {for (double x = -bound; x <=  bound; x += 0.5*step) {double result = pow((pow(x,2) + pow(y, 2) - a), 3) - pow(x,2) * pow(y, 3);if(result <= 0) {cout << "*";} else {cout << " ";}}cout << "\n";}return 0;
}

2、旋转矩阵90°

#include <iostream>
#include <cmath>using namespace std;int main() {// 矩阵旋转const int n = 4;int image[n][n] = {{5, 1, 8, 11},{2, 4, 8, 10},{13, 3, 6, 7},{15, 14, 12, 16}};// 矩阵转置for (int i = 0; i < n; i++) {for (int j = i; j < n; j++) {swap(image[i][j], image[j][i]);}}// 行内翻转for (int i = 0; i < n; i++) {for (int j = 0; j < n/2; j++) {swap(image[i][j], image[i][n-j-1]);}}// 输出for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {cout << image[i][j] << " ";}cout << endl;}return 0;
}

3、std::initializer_list<int>

#include <iostream>using namespace std;class P {
public:P(int, int) {std::cout << "(int, int)" << std::endl;}P(std::initializer_list<int>) {std::cout << "(std::initializer_list<int>)" << std::endl;}
};int main(int argc, char* argv[]) {P p1(77, 5);P p2{77, 5};P r{77, 5, 42};P s = {77, 5};return 0;
}输出
(int, int)
(std::initializer_list<int>)
(std::initializer_list<int>)
(std::initializer_list<int>)#include <iostream>using namespace std;class P {
public:P(int, int) {std::cout << "(int, int)" << std::endl;}// P(std::initializer_list<int>) {//     std::cout << "(std::initializer_list<int>)" << std::endl;// }
};int main(int argc, char* argv[]) {P p1(77, 5);P p2{77, 5};// P r{77, 5, 42};P s = {77, 5};return 0;
}
输出:
(int, int)
(int, int)
(int, int)

4、template

#include <iostream>using namespace std;void print() {}template<typename T, typename... Type>
void print(const T& firstArgs, const Type&... args) {std::cout << firstArgs << std::endl;print(args...);
}int main(int argc, char* argv[]) {print("aaaa", 1, "fefefe", 1.3, 'a');return 0;
}输出:
aaaa
1
fefefe
1.3
a下面的代码也可以:
#include <iostream>using namespace std;template <typename T>
void print(const T& arg) {std::cout << arg << std::endl;
}template<typename T, typename... Type>
void print(const T& firstArgs, const Type&... args) {std::cout << firstArgs << std::endl;print(args...);
}int main(int argc, char* argv[]) {print("aaaa", 1, "fefefe", 1.3, 'a');return 0;
}

5、lambda表达式

int main(int argc, char* argv[]) {int x = 0, y = 32;auto qqq = [x, &y]() {std::cout << "x: " << x << std::endl;std::cout << "y: " << y << std::endl;++y;};x = y = 77;  //这一步y会跟新到lambda中y,但是x不会qqq();qqq();std::cout << "final y: " << y << std::endl; return 0;
}
输出:
x: 0
y: 77
x: 0
y: 78
final y: 79
#include <iostream>
#include <functional>using namespace std;std::function<int(int,int)> returnLambda() {return [](int x, int y) {return x*y;};
}
int main(int argc, char* argv[]) {auto f = returnLambda();std::cout << f(6, 7) << std::endl;return 0;
}
输出:42

6、算法

You are given numbers, an array of non-negative integers. Your task is to perform the following algorithm on this array:
        step 1. Find the index i of the leftmost non-zero element numbers[i] = x != 0, if there is no         such element, finish the algorithm.
        step 2. Starting at index i and going to eht right, attemp to subtract x from each element.
                if the element is strictly less than x, move on to step 3;
                Otherwise, subtract x from the element and move on to the next element;
                if you reach the end of the array, move on to the step 3;
        step 3. Add x to the final result.
        step 4. Go back to step 1.

import randomdef algo(num_list, x):if x <= 0:return 0final_result = 0flag_find_leftmost_x = False# 记录那些将来会被找到的num_list[i] = x的下标record_list = []# 向下传递的减法操作的次数op_times = 0for i, n in enumerate(num_list):# 找到leftmost 等于xif num_list[i] == x and not flag_find_leftmost_x:flag_find_leftmost_x = Truerecord_list.append([i, 0])op_times = 1continue# 表示减法在这里传递失败,更新可以向下传递的次数if flag_find_leftmost_x and n - op_times * x <= 0:op_times = n // x# 如果上次记录的x的后面还没有出现一个小于x的,则标记为出现,在这个题里面record_list中的元素的第二个数字并没有实际用到,# 但是如果题目稍作更改,则第二维度的数字就可以排上用场了if record_list[-1][1] == 0:record_list[-1][1] = 1# 减完之后还能够等于x,则这个位置就是下一轮能够找到的num_list[i] = x的位置elif flag_find_leftmost_x and n - op_times * x == x:op_times += 1record_list.append([i, 0])# 没有找到x,则返回0if not flag_find_leftmost_x:return final_result# print(record_list)total_len = len(record_list)final_result = total_len * xreturn final_result# 最原始的方法
def algo_complexity(num_list, x):if x <= 0:return 0total_len = len(num_list)i = 0final_result = 0# print(num_list)while i < total_len:if num_list[i] == x:flag = Falsefor j in range(i, total_len):if num_list[j] >= x:num_list[j] -= xelse:final_result += xi = -1flag = Truebreakif not flag:final_result += x# print(num_list)i += 1return final_result# num_list = [1, 2, 1, 3, 4, 2, 4, 6]
# num_list = [1, 2, 1, 1, 3, 4, 2, 3, 4, 6]
# num_list = [1, 2, 3, 1, 1, 3, 4, 2, 3, 4, 6]# num_list = [1, 2, 3, 4, 1, 3, 4, 2, 3, 4, 6]
# num_list = [1, 0, 1, 2, 1, 3, 4, 2, 3, 4, 6]  # 2
# num_list = [1, 0, 1, 0, 1, 3, 4, 2, 3, 4, 6]  # 2 + 2
# num_list = [1, 0, 1, 0, 1, 3, 4, 0, 1, 2, 4]  # 2 + 2 + 2
# num_list = [1, 0, 1, 0, 1, 3, 4, 0, 1, 0, 2]  # 2 + 2 + 2 + 2
# num_list = [1, 0, 1, 0, 1, 3, 4, 0, 1, 0, 0]  # 2 + 2 + 2 + 2 + 2# print(algo(num_list, 20))
# print(algo_complexity(num_list.copy(), 20))# 进行10000次测试
for i in range(10000):# 随机生成测试列表的长度list_len = random.randint(6, 500)# 随机生成列表num_list = [random.randint(1, 100) for j in range(list_len)]x = random.randint(1,100)# print("output1: ", algo(num_list, x))# print("output2: ", algo_complexity(num_list, x))a1 = algo(num_list, x)a2 = algo_complexity(num_list.copy(), x)if a1 != a2:print(a1, ",", a2)print(num_list)print(x)print("finished")

7、C++解析CSV文件到vector中

CSV文件格式:a,b,c
#include <iostream>
#include <string>
#include <fstream>
#include <vector>vector<double> getFileData(char* fileName) {vector<double> res;ifstream is(fileName);if (!is) {return res;}string temp;const char* split = ",";while(getline(is, temp)) {char* line = (char*)temp.c_str();char* data = strtok(line, split);whlie(data!=NULL) {res.push_back(atof(data));data = strtok(NULL, split);}}is.close();return res;
}

8、C++异常体系

异常类定义于许多头文件中,为了能够处理标准库可能抛出的所有异常,必须包含:

#include <exception>
#include <stdexcept>
#include <system_error>
#include <new>
#include <ios>
#include <future>
#include <typeinfo>

9、bind(), async()的使用

#include <iostream>
#include <functional>
#include <memory>
#include <future>
using namespace std;void func(int x, int y) {std::cout << "func" << std::endl;
}auto l = [](int x, int y) {std::cout << "lambda l" << std::endl;
};class C {
public:void operator() (int x, int y) const {std::cout << "class C operator" << std::endl;}void memfunc(int x, int y) const {std::cout << "memfunc" << std::endl;}
};int main(int argc, char* argv[]) {C c;std::shared_ptr<C> sp(new C);// bind()std::bind(func, 22, 22)();                  // calls func(22, 22)std::bind(l, 22, 33)();                     // calls l(22, 33)std::bind(C(), 33, 333)();                  // calls C::operator()(33, 333)std::bind(&C::memfunc, c, 22, 33)();        // calls c.memfunc(22, 33)std::bind(&C::memfunc, sp, 33, 33)();       // calls sp->memfunc(33, 33)// async()std::async(func, 23, 43);                   // calls func(22, 43)std::async(l, 112, 32);                     // calls l(112, 32)std::async(c, 23, 32);                      // calls c.operator()(23, 32)std::async(&C::memfunc, &c, 23, 23);        // calls c.memfunc(23, 23)std::async(&C::memfunc, sp, 23, 23);        // calls sp->memfunc(42, 77)return 0;
}
typedef std::pair<int, float> IntFloatPair;
IntFloatPair p(42, 3.14);
std::get<0>(p);
std::get<1>(p);
std::tuple_size<IntFloatPair>::value;
std::tuple_element<0, IntFloatPair>::type     

10、C++用迭代器删除map元素

int main(int argc, char* argv[]) {vector<int> nums{1, 2, 3};for (auto it = nums.begin(); it != nums.end(); ) {if (*it == 2) {it = nums.erase(it);} else {it++;}}for (int i = 0; i < nums.size(); i++) {cout << nums[i] << " ";}map<int, int> mp{{1, 2}, {3, 4}, {5, 6}};for (auto it = mp.begin(); it != mp.end();) {if(it->first == 3) {it = mp.erase(it);} else {it++;}}for (auto it = mp.begin(); it != mp.end(); it++) {cout << it->first << " " << it->second << endl;}return 0;
}

11、map和unordered_map底层实现

unordered_map和map的区别,从算法,底层实现原理区别,效率,桶树等结构等等多个层面解析(c++角度)_unordermap和map性能比较-CSDN博客

12、从非常大的数据里面找出出现次数最多的数

经典面试问题: Top K 之 ---- 海量数据找出现次数最多或,不重复的。 - 指尖下的幽灵 - 博客园 (cnblogs.com)

13、connect函数HOOK

14、unique_ptr如何实现独享

C++ 智能指针unique_ptr原理与自定义实现_unique_ptr move_newchenxf的博客-CSDN博客

15、share_ptr是否线程安全?

c++11总结15——shared_ptr在多线程下的安全性问题_shared_ptr多线程-CSDN博客

所以当我们多个线程访问同一个shared_ptr时,应该要进行加锁操作。 

16、线程有哪些数据是独享的

线程的共享资源与独立资源_线程独有的资源-CSDN博客

17、tuple的输出

#include <iostream>
#include <string>
#include <tuple>
using namespace std;// tuple的输入输出
// helper: print element with index IDX of tuple with MAX elements
template<int IDX, int MAX, typename ...Args>
struct PRINT_TUPLE {static void print(std::ostream& strm, const std::tuple<Args...>& t) {strm << std::get<IDX>(t) << (IDX+1 == MAX? "": ",");PRINT_TUPLE<IDX+1, MAX, Args...>::print(strm, t);}
};
// partial specialization to end the recursion
template<int MAX, typename... Args>
struct PRINT_TUPLE<MAX, MAX, Args...>{static void print(std::ostream& strm, const std::tuple<Args...>& t) {}
};// ou
template <typename... Args>
std::ostream& operator<< (std::ostream& strm, const std::tuple<Args...> &t) {strm << "[";PRINT_TUPLE<0, sizeof...(Args), Args...>::print(strm, t);strm << "]";
}int main(int argc, char* argv[]) {std::tuple<int, float, string> t(44, 2.2, "more light");std::cout << "io: " << t << endl;return 0;
}

18、智能指针删除器

#include <iostream>
#include <string>
#include <tuple>
#include <memory>
using namespace std;// 自定义智能指针的删除器int main(int argc, char* argv[]) {// 使用lambda函数std::shared_ptr<int> p(new int[10], [](int* p) {delete []p;});std::shared_ptr<int> p1(new int[10],std::default_delete<int[]>());std::unique_ptr<int[]> p2(new int[10]);  //okstd::shared_ptr<int[]> p3(new int[10]);  // error// unique_ptr必须明确第二个模板参数,指出自己的deleterstd::unique_ptr<int, void(*)(int*)> p4(new int[10], [](int* p) {delete[] p;});return 0;
}

指向某个文件的最后一个引用销毁时,该文件被移除:

#include <iostream>
#include <string>
#include <fstream>
#include <tuple>
#include <memory>
using namespace std;// 自定义智能指针的删除器class FileDeleter {
private:std::string filename;
public:FileDeleter(const std::string& file):filename(file){}void operator() (std::ofstream* fp) {fp->close();std::remove(filename.c_str());}
};int main(int argc, char* argv[]) {std::shared_ptr<std::ofstream> fp(new std::ofstream("tmpfile.txt"), FileDeleter("tmpfile.txt"));*fp << "ddd";return 0;
}

 使用shared_ptr处理共享内存

linux 共享内存 shm_open ,mmap的正确使用-CSDN博客

#include <iostream>
#include <string>
#include <fstream>
#include <sys/mman.h>
#include <fcntl.h>
#include <unistd.h>
#include <cstring>
#include <cerrno>
#include <tuple>
#include <memory>
using namespace std;// 自定义智能指针的删除器
// 使用shared_ptr处理共享内存
class SharedMemoryDetacher {
public:void operator()(int* p) {std::cout << "unlink /tmp1234" << std::endl;if (shm_unlink("/tmp1234") != 0) {std::cerr << "OOPS: shm_unlink() failed" << std::endl;}}
};std::shared_ptr<int> getSharedIntMemory(int num) {void* mem;int shmfd = shm_open("/tmp1234", O_CREAT | O_RDWR, S_IRWXU | S_IRWXG);if (shmfd < 0) {throw std::string(strerror(errno));}if (ftruncate(shmfd, num*sizeof(int)) == -1) {throw std::string(strerror(errno));}mem = mmap(nullptr, num*sizeof(int), PROT_READ | PROT_WRITE, MAP_SHARED, shmfd, 0);if (mem == MAP_FAILED) {throw std::string(strerror(errno));}return std::shared_ptr<int>(static_cast<int*>(mem), SharedMemoryDetacher());
}int main(int argc, char* argv[]) {std::shared_ptr<int> smp(getSharedIntMemory(100));for (int i = 0; i < 100; i++) {smp.get()[i] = i*42;}// deal with shared memory somewhere elsestd::cout << "<return>" << std::endl;std::cin.get();smp.reset();return 0;
}

19、weak_ptr的使用

#include <iostream>
#include <string>
#include <vector>
#include <memory>using namespace std;//weak_ptr
class Person {
public:string name;shared_ptr<Person> mother;shared_ptr<Person> father;vector<shared_ptr<Person>> kids;Person(const string& n, shared_ptr<Person> m = nullptr,shared_ptr<Person> f = nullptr) :name(n), mother(m), father(f) {}~Person() {cout << "delete " << name << endl;}
};shared_ptr<Person> initFamily(const string& name) {shared_ptr<Person> mom(new Person(name + "'s mom"));shared_ptr<Person> dad(new Person(name + "'s dad"));shared_ptr<Person> kid(new Person(name, mom, dad));mom->kids.push_back(kid);dad->kids.push_back(kid);return kid;
}int main(int argc, char* argv[]) {shared_ptr<Person> p = initFamily("nico");cout << "nico's family exists" << endl;cout << "- nico is shared " << p.use_count() << " times" << endl;cout << "- name of 1st kid of nico's mom: "<< p->mother->kids[0]->name << endl;// 重新修改p的指向,会发现没有delete函数被调用p = initFamily("jim");cout << "jim's family exists" << endl;return 0;
}

#include <iostream>
#include <string>
#include <vector>
#include <memory>using namespace std;//weak_ptr
class Person {
public:string name;shared_ptr<Person> mother;shared_ptr<Person> father;vector<weak_ptr<Person>> kids;   //使用weak_ptrPerson(const string& n, shared_ptr<Person> m = nullptr,shared_ptr<Person> f = nullptr) :name(n), mother(m), father(f) {}~Person() {cout << "delete " << name << endl;}
};shared_ptr<Person> initFamily(const string& name) {shared_ptr<Person> mom(new Person(name + "'s mom"));shared_ptr<Person> dad(new Person(name + "'s dad"));shared_ptr<Person> kid(new Person(name, mom, dad));mom->kids.push_back(kid);dad->kids.push_back(kid);return kid;
}int main(int argc, char* argv[]) {shared_ptr<Person> p = initFamily("nico");cout << "nico's family exists" << endl;cout << "- nico is shared " << p.use_count() << " times" << endl;cout << "- name of 1st kid of nico's mom: "<< p->mother->kids[0].lock()->name << endl;    //使用weak_ptr时,这里需要修改,因为weak_ptr没有* ->操作符// 重新修改p的指向,会发现没有delete函数被调用p = initFamily("jim");cout << "jim's family exists" << endl;return 0;
}输出:
nico's family exists
- nico is shared 1 times
- name of 1st kid of nico's mom: nico
delete nico
delete nico's dad
delete nico's mom
jim's family exists
delete jim
delete jim's dad
delete jim's mom

 如果不确定weak_ptr背后的对象是否存活,可以使用如下三个方法检查weak_ptr

(1)调用expired(),它会在weak_ptr不再共享对象时,返回true,等同于检查use_count()是否为0.

(2)使用响应的shared_ptr构造函数明确的将weak_ptr转换为一个shared_ptr,如果对象不存在,构造函数会抛出异常bad_weak_ptr异常,其what()会产生bad_weak_ptr。

(3)调用use_count(),询问相应对象拥有者的数量,返回0表示不存在任何有效对象。

try {shared_ptr<string> sp(new string("hi"));weak_ptr<string> wp = sp;sp.reset();cout << wp.use_count() << endl;  // 0cout << boolalpha << wp.expired() << endl; // trueshared_ptr<string> p(wp); // bad_weak_ptr} catch (const std::exception& e) {cerr << "exception: " << e.what() << endl;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/177894.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GAN:GAN论文学习

论文&#xff1a;https://arxiv.org/pdf/1406.2661.pdf 发表&#xff1a;2014 一、GAN简介&#xff1a;Generative Adversarial Network GAN是由Ian Goodfellow于2014年提出&#xff0c;GAN&#xff1a;全名叫做生成对抗网络。GAN的目的就是无中生有&#xff0c;以假乱真。 …

3. 迷宫问题

一.题干 迷宫有一个入口&#xff0c;一个出口。一个人从入口走进迷宫&#xff0c;目标是找到出口。阴影部分和迷宫的外框为墙&#xff0c;每一步走一格&#xff0c;每格有四个可走的方向&#xff0c;探索顺序为地图方向&#xff1a;南&#xff08;下&#xff09;、东&#xff0…

【Qt】之QSet使用

描述 QSet类是一个模板类&#xff0c;它提供基于散列表的集合。 QSet是Qt的通用容器类之一。它以未指定的顺序存储值&#xff0c;并提供非常快速的值查找。在内部,QSet是作为QHash实现的。 下面是一个带有QString值的QSet示例: QSet<QString> set;插入方式1&#xff…

Java学习路线第二篇:Java Web

这篇则分享Java学习路线第二part&#xff1a;Java Web 恭喜你已经成功追到第二章节啦&#xff0c;要被自己的努力感动到了吧&#xff0c;而这节将承担起学完Java web 的使命&#xff0c;本使命为单向契约&#xff0c;你可选择YES或者选择YES。 HTMLCSSJavaScript(JS) 【动…

MySQL 高可用架构

MySQL 是实际生产中最常用的数据库&#xff0c;生产环境数据量极为庞大&#xff0c;对性能和安全要求很高&#xff0c;单机的 MySQL 是远远达不到的&#xff0c;所以必须搭建一个主从复制架构&#xff0c;同时可以基于一些工具实现高可用架构&#xff0c;在此基础上&#xff0c…

富富集网络图绘制教程

本期教程 前言 今天学习aPEAR包&#xff0c;绘制KEGG和GO功能富集网络图&#xff0c;用起来还是比较方便的&#xff0c;直接将clusterProfiler富集结果进行绘制&#xff0c;对人类、动物等分析结果非常方便。对于模式植物&#xff0c;使用自己制作的GO或KEGG背景文件进行富集分…

Modbus平台:协议中间件(支持Modbus TCP、RTU、ASCII)

该程序可放置外网中&#xff0c;适用于DTU长连接&#xff08;心跳包必须包含DTU&#xff0c;可以是tcp/udp&#xff09;&#xff0c;也可以在内网中&#xff0c;短连接访问设备server 支持协议&#xff1a;Modbus TCP | RTU | ASCII 连接方式&#xff1a;TcpAtive: TCP主动 | …

嵌入式常见协议---IIC协议

1.IIC&#xff08;IC&#xff09;协议是什么&#xff1f; 全称 Inter-Integrated Circuit ,字面意思是集成电路之间&#xff0c;是IC BUS简称&#xff0c;中文应该叫集成电路总线&#xff0c;是一种串行通信总线&#xff08;同步串行半双工&#xff09;&#xff0c;使用多主从…

给csgo游戏搬砖新手的十大建议

1、不要参与赌博性质的开箱和炼金&#xff0c;因为真的会上瘾&#xff0c;赚了还好&#xff0c;亏了你得哭。 2、实在想要玩饰品&#xff0c;直接去悠悠有品或者网易buff看价格&#xff0c;底价再砍10元&#xff0c;总会有人愿意卖的。 3、在steam上不要接受陌生人的好友申请…

MidJourney笔记(4)-settings

前面已经大概介绍了MidJourney的基础知识,后面我主要是基于实操来分享自己的笔记。可能内容顺序会有点乱,请大家理解。 这次主要是想讲讲settings这个命令。我们只需在控制台输入/settings,然后回车,就可以执行这个命令。 (2023年11月26日版本界面) 可能有些朋友出来的界…

leetcode:有效的括号

题目描述 题目链接&#xff1a;20. 有效的括号 - 力扣&#xff08;LeetCode&#xff09; 题目分析 题目给了我们三种括号&#xff1a;&#xff08;&#xff09;、{ }、[ ] 这里的匹配包括&#xff1a;顺序匹配和数量匹配 最优的思路就是用栈来解决&#xff1a; 括号依次入栈…

01 项目架构

关于我 曾经就职于蚂蚁金服&#xff0c;多年的后端开发经验&#xff0c;对微服务、架构这块研究颇深&#xff0c;同时也是一名热衷于技术分享、拥抱开源技术的博主。 个人技术公众号&#xff1a;码猿技术专栏个人博客&#xff1a;www.java-family.cn 前期一直在更新《Spring…

OCR文字识别工具 Cisdem OCRWizard激活最新 for Mac

为了提高内容识别的准确性&#xff0c;Cisdem OCRWizard提供供您选择两种模式&#xff1a;文件或名片。此外&#xff0c;它会自动分析的内容&#xff0c;标志着不同颜色的页面上几个区域根据给定部分的性质&#xff1a;文本&#xff08;绿色标记&#xff09;&#xff0c;图像&a…

干货分享 | TSMaster采样点配置方法与消除错误帧流程

当通讯节点间采样点参数和波特率参数不匹配造成一些错误帧时&#xff0c;我们如何在TSMaster中设置以及调整波特率参数和采样点参数&#xff0c;来减少以及消除总线上出现的错误帧&#xff0c;进一步提高通信质量。本文着重讲解讲解如何借用TSmaster更加便捷地获取相应的采样点…

SpringBoot 入门学习

开发环境配置 JDK 1.8、Maven 3.8.8、 IDEA CE 2023.2 框架介绍 Spring Boot 是由 Pivotal 团队提供的全新框架&#xff0c;其设计目的是用来简化 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置&#xff0c;从而使开发人员不再需要定义样板化的配置…

QT QComBox实现模糊查询

一、概述 在Qt中&#xff0c;可以通过QComboBox和QLineEdit实现模糊查询的功能。模糊查询是指根据用户输入的文本&#xff0c;在下拉框的选项中进行模糊匹配&#xff0c;并动态地显示匹配的选项。 二、基础知识 1、QCompleter (1)QCompleter 是 Qt 框架中提供的一个用于自动…

JOSEF 漏电继电器JHOK-ZBL1 DH-50L 系统1140V 电源AC220V

系列型号&#xff1a; JHOK-ZBL多档切换式漏电&#xff08;剩余&#xff09;继电器 JHOK-ZBL1多档切换式漏电&#xff08;剩余&#xff09;继电器 JHOK-ZBL2多档切换式漏电&#xff08;剩余&#xff09;继电器 JHOK-ZBM多档切换式漏电&#xff08;剩余&#xff09;继电器 …

【Java Spring】SpringBoot 五大类注解

文章目录 Spring Boot 注解简介1、五大类注解的作用2、五大类注解的关系3、通过注解获取对象4、获取Bean对象名规则解析 Spring Boot 注解简介 Spring Boot的核心就是注解。Spring Boot通过各种组合注解&#xff0c;极大地简化了Spring项目的搭建和开发。五大类注解是Spring B…

老师怎样处理校园欺凌

校园欺凌是一个让人痛心又不可忽视的问题。作为老师&#xff0c;该如何处理这种问题&#xff0c;既能够保护受欺凌的学生&#xff0c;又能够让施暴者得到应有的教训呢&#xff1f; 及时发现并介入 经常关注学生的动态&#xff0c;一旦发现有校园欺凌的苗头&#xff0c;就要及时…

pytorch读取tiny-imagenet-200的验证集(val)

ori_train torchvision.datasets.ImageFolder(root args.datadir /tiny-imagenet-200/train/, transformtransform)#可以获取class_idx的映射class_idx ori_train.class_to_idx val_annotations.txt中存储着每个图片对应的类别 获取验证集的标签 test_target []#读取val_…