C++ STL 教程 在前面的章节中,我们已经学习了 C++ 模板的概念。
C++ STL 教程在前面的章节中,我们已经学习了 C++ 模板的概念。
然后,因为一个字节是8个比特位,那么在开辟空间的时候就是按照字节开辟,存储比特位也通过字节位移的方式存储。 那么对应值如何映射到位图中呢? 首先确定是在哪一个字节,也就是要/8,然后确定是该字节中的哪个比特位当中%8。 j = x % 8; _arr[i] |= (1 << j); } void reset(size_t x)//清除比特位 { size_t i = x / 8; size_t j = x % 8; _arr[i] &= (~(1 << j)); } bool test(size_t x)//查找这个数是否存在 { size_t i = x / 8; size_t j = x % 8; return _arr[i] &= (1 << j);//0就是不存在,非0就是存在 } private: vector<char> _arr;
deque容器 deque容器基本概念 功能: 双端数组,可以对头端进行插入删除操作 deque与vector区别: vector对于头部的插入删除效率低,数据量越大,效率越低 deque相对而言,对头部的插入删除速度回比vector快 vector访问元素时的速度会比deque快,这和两者内部实现有关 deque内部工作原理: deque内部有个中控器,维护每段缓冲区中的内容,缓冲区中存放真实数据 中控器维护的是每个缓冲区的地址,使得使用deque时像一片连续的内存空间 deque容器的迭代器也
c++中的tuple是一个允许存放多种不同的数据类型的容器,是针对pair的泛型,和pair一样在std 的namespace中,在使用的时候,需要引用头文件,同时注意namespace;
阅读更多:Java 8 Lambda表达式教程 函数式接口 函数式接口也称为单抽象方法接口(SAM接口)。正如名字所暗示的,他们只允许一个抽象方法。 Reda更多:Java 8默认方法教程 Streams 另一个重大改变引入了Java 8 Streams API,它提供了一种以各种方式处理一组数据的机制,可以包括过滤,转换或可能对应用程序有用的任何其他方式 API更改 Java 8 Lambda表达式教程 一个非常全新而令人兴奋的功能,java 8搭配它,是Lambda表达式。 Java 8默认方法教程 我们了解了Lambda表达式和函数式接口。现在,让我们继续讨论,并谈谈另一个相关的功能,即默认方法。那么这对java开发者来说真的是革命性的。 在本教程中,我将在函数式接口的上下文中扩展主题。 什么是函数式接口 函数式接口是java 8中的新增功能,它们在其中只允许一个抽象方法。这些接口也称为单抽象方法接口(SAM接口)。
概念:stack是一种先进后出(First In Last Out,FILO)的数据结构,它只有一个出口
其中,m表示断号ID,n表示重号ID 样例输入: 2 5 6 8 11 9 10 12 9 样例输出: 7 9 五、map/multimap 去重类问题 可以打乱重新排列的问题 有清晰的一对一关系的问题
1. 队列是一种容器适配器,专门用于在FIFO上下文(先进先出)中操作,其中从容器一端插入元
总结: vector赋值方式比较简单,使用operator=,或者assign都可以
例如:查找find,拷贝copy,删除delete 替换replace,插入insert
include<algorithm> 3 #include<string> 4 using namespace std; 5 int main() 6 { 7 string str; 8 include<algorithm> 3 #include<string> 4 using namespace std; 5 int main() 6 { 7 string str; 8
倍方式扩容 making foo grow: capacity changed: 1 capacity changed: 2 capacity changed: 4 capacity changed: 8 include <vector> int main() { vector<int> v{1,2,3,4,5,6}; auto it = v.begin(); // 将有效元素个数增加到100个,多出的位置使用8填充 ,操作期间底层会扩容 // v.resize(100, 8); // reserve的作用就是改变扩容大小但不改变有效元素个数,操作期间可能会引起底层容 量改变 // v.reserve(100); / / 插入元素期间,可能会引起扩容,而导致原空间被释放 // v.insert(v.begin(), 0); // v.push_back(8); // 给vector重新赋值,可能会引起底层容量改变 v.assign (100, 8); /* 出错原因:以上操作,都有可能会导致vector扩容,也就是说vector底层原理旧空间被释 放掉,而在打印时,it还使用的是释放之间的旧空间,在对it迭代器操作时,实际操作的是一块
在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,后来这个
void TestListIterator1() { int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; list<int> l(array, array+sizeof 必须先给 其赋值 l.erase(it); ++it; } } // 改正 void TestListIterator() { int array[] = { 1, 2, 3, 4, 5, 6, 7, 8,
set<int> setInt; setInt.insert(2); setInt.insert(1); setInt.insert(8); setInt.insert( 5); setInt.insert(9); bool bFind = binary_search(setInt.begin(),setInt.end(),8); count() 利用等于操作符 (4); vecInt.push_back(8); vecInt.push_back(6); int iCount = count(vecInt.begin(),vecInt.end (),8); //iCount==2 count_if() count_if 算法计算中的元素范围 [first, last),返回满足条件的元素的数量。 3); vecInt.push_back(3); vecInt.push_back(1); vecInt.push_back(4); vecInt.push_back(8)
前言:在上一篇文章中,我们介绍了二叉搜索树这种树形结构,它与之前学过的序列式容器有所不同。本文将重点讲解基于二叉搜索树实现的另外一个容器:map。它的底层实现也采用了平衡二叉搜索树。
namespace std; void test_set1() { //使用initializer_list(初始化列表)构造 set<int> s = { 1,3,4,6,2,1,5,9,7,8 };//中序遍历 加上排序去重 //隐式类型转化 set<int> s2({1, 2, 3, 2, 5, 6, 7,9,10,8,12}); //拷贝构造 set<int> s3(s); // > using namespace std; void test_set1() { //使用initializer_list构造 set<int> s = { 1,3,4,6,2,1,5,9,7,8 };//中序遍历 加上排序去重 //隐式类型转化 set<int> s2({1, 2, 3, 2, 5, 6, 7,9,10,8,12}); //拷贝构造 set<int> s3(s); set 代码示例: void test_set4() { set<int> s2({1, 2, 3, 2, 5, 6, 7,9,10,8,12}); //==========================
1); a.push(2); a.push(3); a.push(4); a.push(5); queue<int> b; b.push(6); b.push(7); b.push(8)