一个依靠STL vector的接口进行申请和回收管理的内存池类( c++ 封装)

其他出现两次,只有一个出现一次的那道题我就不更了,直接抑或,最后的结果就是那个数。为什么可以这样做呢?因为一个32位int,如果所有数都出现了两次,那么为1的那些位统计的个数一定是2的倍数,抑或之后全变成0。一个数出现了一次,它为1的那些位上,1的个数必定是奇数,抑或之后一定还是1。

我之前知道出现两次这个题的解法,但是理解的不够深,以为抑或是关键,其实不是,出现了偶数次才是关键。理解了这点,推广到出现3次上,如果所有的出现了三次,那么为1的那些位1的个数一定是三的倍数,那如果有一个数出现了一次呢?没错,它为1的那些以三余模之后,肯定是1。换言之,出现几次都可以用同样的思想解,只不过如果这个重复次数不是偶数,就不能用抑或简单的解决,而是一位一位的用一个量来保存位运算的结果,一看代码就明白了。

还有一个有趣的问题,是剑指offer上的,如果一个数组中只有两个数出现了一次,其他都出现了两次,怎么快速找出这两个数呢?这次的关键是抑或操作。想想把数组抑或之后得到的结果是什么呢?出现两次的数都被自己抑或成了0,对,相当于这两个出现了一次的数的抑或,他们抑或的结果是什么呢?不同的位被置1,相同的位被置0。两个数不同,所以至少有一位被置1了。我们可以根据这一位来分类,这一位为0的归为一类,为1的归为一类,这两类分别抑或,得到的就是要求的那两个数了。

最后还是贴上三次一个的代码:

class Solution {
public:
    int singleNumber(int A[], int n) {
        int res=0;
        for(int i=0;i<32;i++){
            int count = 0;
            for(int j=0;j<n;j++){
                count += (A[j]>>i)&1;
            }
            res |= ((count%3)<<i);
        }
        return res;
    }
};

一个依靠STL vector的接口进行申请和回收管理的内存池类( c++ 封装)

时间: 2024-10-27 12:17:34

一个依靠STL vector的接口进行申请和回收管理的内存池类( c++ 封装)的相关文章

利用内存chunk充当数据buffer的vector的实现,和STL vector 有接口操作性能比较

问题描述: 1.vector是最常用到的容器,它其实是一种自动扩充的动态数组,底层实现通过两倍扩展, 所以再不能预知要存入元素多少时,难免要两倍扩展,这带来了拷贝所存对象的开销: 2.本文尝试利用memory chunk作为底层存储容器来避免动态扩展时copy 开销: 3.本实现屏蔽了STL  vector 一些接口比如erase,主要是为了减轻实现复杂性考虑: 4.它支持两边插入和删除操作,其接口功能完全等同于STL 的deque: 5.和STL vector 做了push_back, pop

STL源码分析之内存池

前言 上一节只分析了第二级配置器是由多个链表来存放相同内存大小, 当没有空间的时候就向内存池索取就行了, 却没有具体分析内存池是怎么保存空间的, 是不是内存池真的有用不完的内存, 本节我们就具体来分析一下 内存池 static data template的初始化 template <bool threads, int inst> char *__default_alloc_template<threads, inst>::start_free = 0; // 内存池的首地址 tem

STL源码之实现一个简易的Vector容器

STL源码之实现一个简易的Vector容器 这里需要的基础知识主要是类模板和函数模板,以及一个C++内存分配的技术allocator类,它提供可感知类型的内存分配,这个类支持一个抽象接口,以分配内存并随后使用该内存保存对象. 使用allocator类,首先应用allocator类建立一个allocator对象,然后使用该对象你可以分配内存,释放内存,构造你需要的对象,释放不要的对象. template<class T>allocator<T> Vector<T>::al

C++ STL vector容器学习

STL(Standard Template Library)标准模板库是C++最重要的组成部分,它提供了一组表示容器.迭代器.函数对象和算法的模板.其中容器是存储类型相同的数据的结构(如vector,list, deque, set, map等),算法完成特定任务,迭代器用来遍历容器对象,扮演容器和算法之间的胶合剂. 模板类vector 在计算中,矢量(vector)对应数组,它的数据安排以及操作方式,与array非常类似.在C++中,使用vector模板类时,需要头文件包含#include<v

STL vector用法介绍

介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使用.通过阅读这篇文章读者应该能够有效地使用vector容器,而且应该不会再去使用C类型的动态数组了.   Vector总览 vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象

STL ——vector 学习

STL简介 C++ STL (Standard Template Library标准模板库) 是通用类模板和算法的集合,它提供给程序员一些标准的数据结构的实现如 queues(队列), lists(链表), 和 stacks(栈)等.  C++ STL 提供给程序员以下三类数据结构的实现: 标准容器类   顺序性容器  vector 从后面快速的插入与删除,直接访问任何元素  deque 从前面或后面快速的插入与删除,直接访问任何元素 list 双链表,从任何地方快速插入与删除   关联容器  

STL vector容器需要警惕的一些坑

从迭代器中取值切记需要判断是否为空 例如: 1 vector<int> vtTest; 2 vtTest.clear(); 3 if (vtTest.empty()){ 4 return 0; 5 } 6 7 int *pTest = &vtTest[0]; 如果没有忘了判断则会出现这样的异常_DEBUG_ERROR("vector subscript out of range"); 其实这条异常是Visual C++专有,在g++当中并不会出现,所取得的数值是0.

C++ stl vector介绍

转自: STL vector用法介绍 介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使用.通过阅读这篇文章读者应该能够有效地使用vector容器,而且应该不会再去使用C类型的动态数组了.   Vector总览 vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被认为是一个容器,是

STL vector

author:Donald-hu    theme:STL vector 介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使用.通过阅读这篇文章读者应该能够有效地使用vector容器,而且应该不会再去使用C类型的动态数组了.   Vector总览 vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.v