stl
文章平均质量分 70
Hello,C++!
这个作者很懒,什么都没留下…
展开
-
《C++ STL开发技术引导》 第五章-C++ STL泛化技术分析笔记
for_each的定义。for_each的实例。原创 2023-02-08 10:01:30 · 649 阅读 · 0 评论 -
萃取(traits)编程技术的介绍和应用
我们知道, C++自定义类型有很多特性(traits), 比如拥有构造函数, 拷贝构造函数, 析构函数. 另一方面, C++内置类型入整形int, long, 就没有构造函数, 拷贝构造函数, 析构函数. 根据这些特性, 我们就可以采用最有效的措施进行构造和赋值, 比如对内置类型, 根本就不需要调用构造函数和拷贝构造函数, 而直接采用内存处理操作(malloc(), memcpy()), 从而获得最高效率, 这对于大规模而且操作频繁的容器, 有显著的性能提升.转载 2023-02-07 14:16:35 · 993 阅读 · 0 评论 -
【C++模版之旅】神奇的Traits
现在需求变了,需要在T为int类型时,Compute方法的参数为int,返回类型也为int,当T为float时,Compute方法的参数为float,返回类型为int,而当T为其他类型,Compute方法的参数为T,返回类型也为T,怎么做呢?介绍traits的文章很多,但感觉大部分文章的说明都很晦涩难懂,把一个并不很复杂的C++模板的应用描述的过于复杂。假设有这样的需求,类Test中的某部分处理会随着类型T的不同而会有所不同,比如希望判断T是否为指针类型,当T为指针类型时的处理有别于非指针类型,怎么做?转载 2023-02-07 13:55:14 · 123 阅读 · 0 评论 -
STL测试
array<int, 3> arr{ 1,2,3 }, arr1{4,5,6};arr.begin();arr.end();arr.rbegin();arr.rend();arr.cbegin();arr.cend();arr.size();arr.front();arr.back();int data = std::get<2>(arr);arr.e...原创 2019-03-04 09:31:16 · 411 阅读 · 0 评论 -
map删除迭代器的处理
删除部分:std::map<inti,int> targets;for(auto it = targets.begin(); it!=targets.end();){ if(......) { targets.erase(it++); } else { it++; }}全部删除:std::map<i...原创 2019-12-07 23:33:30 · 1103 阅读 · 0 评论 -
【无标题】
STL源码转载 2022-06-12 12:49:11 · 221 阅读 · 0 评论 -
c++的Lambda表达式
测试代码如下,不加’&'参数,vs直接报错class Test{public: void fun(); int data = 1;};void Test::fun(){ [](int a) {cout << data << endl;}(123);}int main(){ Test t; t.fun(); getchar(); return 0;}报错内容如下:封闭函数“this”不能在 lambda 体中引用,除非其位于捕获列转载 2021-05-06 16:18:33 · 3115 阅读 · 0 评论 -
stl判断数据的类型
1、判断类型是否相等int A = 1;int B = 2;float C = 3.f;std::cout << typeid(A) == typeid(B) << " " << typeid(B) == typeid(C) << std::endl;2、输出数据的类型名class Test {};int A = 1;float B = 3.f;Test C;std::cout << "A type:" << t原创 2021-04-06 14:32:18 · 261 阅读 · 0 评论 -
死锁的一点分析
对多个互斥对象加锁在某些情况下我们可能需要对多个互斥对象进行加锁,考虑下面的代码std::mutex mt1, mt2;// thread 1{ std::lock_guard<std::mutex> lck1(mt1); std::lock_guard<std::mutex> lck2(mt2); // do something}// thread 2{ std::lock_guard<std::mutex> lck2(mt原创 2020-09-20 17:19:28 · 114 阅读 · 0 评论 -
STL vector+sort排序和multiset/multimap排序比较
在C++的STL库中,要实现排序可以通过将所有元素保存到vector中,然后通过sort算法来排序,也可以通过multimap实现在插入元素的时候进行排序。在通过vector+sort进行排序时,所有元素需要先存入vector容器中,sort在排序时又需要将元素全部取出来再进行排序。multimap底层实现为红黑树,因此元素在插入的过程中就实现了排序。那么到底哪一种排序速度更快呢?下面有一个测试程序:#include <vector>#include <set>#incl转载 2020-06-12 17:57:12 · 664 阅读 · 1 评论 -
STL笔记
string对象的定义和初始化string s1; 默认构造函数,s1为空串string s2(s1); 将s2初始化为s1的一个副本string s3(“value”); 将s3初始化为一个字符串字面值的副本string s4(n,‘c’); 将s4初始化为字符‘c’的n个副本strings和c-strings有三个函数可以将字符串内容转换为字符数组或c-str...原创 2018-10-23 15:34:03 · 217 阅读 · 0 评论 -
STL算法集合
// 简单查找算法,要求输入迭代器(input iterator)find(beg, end, val); // 返回一个迭代器,指向输入序列中第一个等于 val 的元素,未找到返回 endfind_if(beg, end, unaryPred); // 返回一个迭代器,指向第一个满足 unaryPred 的元素,未找到返回 endfind_if_not(beg, end, unaryPre...原创 2019-02-26 10:48:22 · 320 阅读 · 0 评论 -
STL几个容器的比较
vector:连续内存,随机访问数据成员快,但是频繁的插入(需要移动要插入的元素的后面的所有元素)或者扩容(vector扩容后会清掉原来的数据,拷贝到新的申请的大的内存中去,特别是有比较复杂的类的时候会调用构造和析构函数极大影响性能)的操作会影响性能。list:链式分布于内存中。访问数据成员很慢,需要从头逐个遍历,但是插入和删除元素不需要移动其他数据成员。set: 对于关联容器(包括map)来...原创 2019-03-19 20:00:26 · 328 阅读 · 0 评论 -
STL注意问题
1、在声明一个vector的时候,尽量指明大小,如果输入数据不超过10^6,那就声明一个10^6大小的vector,否则,vector的默认大小是10.(太小了),但是vector的大小可以自动扩大,不要以为仅仅是在已经分配的空间后面再多申请一块,而是新开辟一块空间,把原来的复制过去.想一下,如果你的vector不断的扩容,不断的复制,效率能不低吗?这就是有的网友问为什么STL的vector没有...原创 2019-03-20 09:29:01 · 307 阅读 · 0 评论 -
C++ 之高效使用STL(查找算法的选择)
你要寻找什么,而且你有一个容器或者你有一个由迭代器划分出来的区间——你要找的东西就在里面。你要怎么完成搜索呢?你箭袋中的箭有这些:count、count_if、find、find_if、binary_search、lower_bound、upper_bound和equal_range。面对着它们,你要怎么做出选择?简单。你寻找的是能又快又简单的东西。越快越简单的越好。暂时,我假设你有一对指定了...转载 2019-04-17 14:27:00 · 1144 阅读 · 0 评论 -
stl中copy注意的地方
使用copy函数或copy_backward函数有可能产生数组越界的可能,一定要将vector数组resize 好,然后再copy,否则就会崩溃。例子如下:#include <iostream>#include <cstdio>#include <algorithm>#include <vector>using namespace std;...原创 2019-08-27 13:29:10 · 311 阅读 · 0 评论 -
计算stl中重复元素个数的函数
可以使用count计算元素中重复元素个数#include <iostream>#include <bitset>#include <vector>using namespace std;int main(int argc, char* argv){ bitset<8> bt; bool ret = bt.any(); if (r...原创 2019-08-27 13:37:31 · 1449 阅读 · 0 评论 -
c++ 之 std::move
在C++11中,标准库在中提供了一个有用的函数std::move,std::move并不能移动任何东西,它唯一的功能是将一个左值强制转化为右值引用,继而可以通过右值引用使用该值,以用于移动语义。从实现上讲,std::move基本等同于一个类型转换:static_cast<T&&>(lvalue);1、C++ 标准库使用比如vector::push_back 等这类函数...转载 2019-09-06 14:53:38 · 268 阅读 · 0 评论 -
STL小结
STL算法1、sort:排序2、unique函数:一般用于sort后,清楚掉排序后重复的记录,使记录唯一。3、find:查找一个记录。4、unique_copy:可以将一个list对象中不重复的元素赋值到一个空的vector对象中。5、find_first_of:第一段范围内查找与第二段范围中任意元素匹配的元素,然后返回一个迭代器,指向第一个匹配的元素。如果找不到匹配元素,则返回第一个范...原创 2018-10-23 15:14:15 · 164 阅读 · 0 评论