原创 C++ hashmap實現

目錄   1 hashmap原理   2 代碼實現  1 hashmap原理 hashmap和map的區別。hashmap底層使用hashtable來實現,手動實現通過array + 鏈表,鏈表上保存相同key的節點,需要實現hash映射

原创 小米麪試題 計算朋友圈問題

假如已知有n個人和m對好友關係(存於數字r)。如果兩個人是直接或間接的好友(好友的好友的好友...),則認爲他們屬於同一個朋友圈,請寫程序求出這n個人裏一共有多少個朋友圈。 假如:n = 5 , m = 3 , r = {{1 , 2}

原创 C/S通信---服務器IO多路複用模型之epoll的使用

服務端代碼: #include<stdio.h> #include<sys/socket.h> #include<unistd.h> #include<sys/types.h> #include<errno.h> #include<str

原创 多線程安全CAS實現的無鎖

實現無鎖隊列的關鍵點有二: 1、各個平臺的原子操作或者說CAS原語; 2、ABA問題的理解和解決。 首先來說說這個CAS原語,所謂CAS(Compare And Swap)即比較並交換,在 Intel 處理器中,比較並交換通過指令的

原创 有 n 個硬幣,一開始全部正面朝上,每次可以翻轉 k 個硬幣( k 小於 n ),那麼至少要 p 次翻轉,才能讓所有硬幣反面朝上,求 p 的值

——情況1:若 n 爲奇數—— 1.1 若 k 爲偶數 => 無解 證明: 若要讓所有硬幣最終翻面,則每個硬幣都要翻面奇數次,共有奇數個硬幣,所以所有硬幣的翻面總數爲奇數,但每次只能翻面偶數個硬幣,顯然不可能。證畢!1.2 若 k 爲奇數

原创 從矩陣左上角至右下角(無權值)問題

一個 M*N 的矩陣,從矩陣的左上角到矩陣的右下角,只能向右走或者向下走,有多少種解法? 1、數學解法 使用排列組合有兩種思路。因爲只能向右走或者向下走。 (1)在M+N次行走後,才能到達終點,也就是右下角,而在這M+N次行走中,有M次

原创 判斷單鏈表是否存在環及尋找環的入口點

判斷鏈表是否存在環,有如下幾種解法: 1. 遍歷鏈表,將已經遍歷過的節點放在一個hash表中,如果一個節點已經存在hash表中,說明有環。時間:O(n) 空間:O(n) 2. 反轉鏈表。使用反轉鏈表的方法, 每過一個節點就把該節點的指針

原创 C++ const用法

一、const成員變量 const成員變量初始化方式: 構造函數初始化列表中進行初始化 將const成員變量用static修改,在類外初始化 二、const成員函數 class A{ public: void test() co

原创 STL配接器adapters簡介

STL中有三類配接器:iterator adapter、function adapter、containers adapter。 一、iterator adapter STL爲迭代器提供了各種配接器,包括insert iterators、

原创 C++中new操作符實現

C++中new操作符實現 一、new操作符 C++中new操作符是語言內置的,不能被重載,實現了兩個功能:內存分配、調用對象構造函數。其中內存分配調用標準函數operator new,聲明如下: void * operator new(

原创 linux下gtest測試環境搭建步驟

Step 1:下載gtest 地址:https://code.google.com/p/googletest/downloads/list Step 2:gtest安裝 1.解壓後進入gtest目錄,如下: 2.cmake CMakeL

原创 Linux C/C++教程(五)-- 重載

目錄   一、函數重載 二、運算符重載 一、函數重載 二、運算符重載

原创 Linux C/C++教程(七)-- 多態

目錄   一、什麼是多態 二、多態的實現與意義 一、什麼是多態 二、多態的實現與意義

原创 Linux C語言教程(二) 運算符與表達式

目錄   一、算術運算符與賦值運算符 二、比較運算符與邏輯運算符 三、位運算符與sizeof運算符 四、運算符優先級 一、算術運算符與賦值運算符 二、比較運算符與邏輯運算符 三、位運算符與sizeof運算符 四、運算符優先級

原创 Linux C/C++教程(六)-- 繼承

目錄   一、繼承的概念 二、繼承的方式 2.1 單繼承 2.2 多繼承 一、繼承的概念 二、繼承的方式 2.1 單繼承 2.2 多繼承