原创 【GTK】GTK介紹

最近在用GTK寫一些工具,所以寫一個基礎教程系列,總結學習成果。 簡介 GTK是一款開源的、面向多平臺的GUI工具箱,其英文全稱爲GIMP Toolkit。最初是Peter Mattis 和 Spencer Kimball 爲GNU Ima

原创 【GTK】Windows下Haskell的GTK開發環境搭建

一個在Windows下相對小衆的GUI框架-GTK,碰上一個相對小衆的編程語言-Haskell,會碰出什麼樣的火花呢?現實的結果就是:相對於Linux,想在Windows下搭建好一個能工作的開發環境,簡直是太難了!本篇文章介紹了一種可用的搭

原创 【現代C++】原始字符串-raw string literal

今天說一個C++11 引入一個小但非常有用的特性--原始字符串(raw string literal)。 背景 在每個程序中,幾乎都應用到字符串字面量。但傳統的字符串字面量的語法對帶有特殊字符的字面量的支持不友好,它引入了一些轉義字符來表示

原创 【算法】算法圖解筆記_廣度優先搜索

你經常需要解決最短路徑問題(shorterst-path problem)。解決最短路徑問題的算法被稱爲廣度優先搜索。廣度優先搜索算法最早由Edward F. Moore 1959年在“如何從迷宮中尋找出路”這一問題中提出。 廣度優先搜索讓

原创 【C++】jsoncpp庫問題一二

Json是數據交換常用的一種數據格式。C++標準庫並沒有包含任何Json標準的實現,所以我們要藉助於一些第三方庫,jsoncpp就是一個常用的庫。由於工作中經常用jsoncpp,發現這個庫問題不少,該篇文章本意是想深度吐槽一下這個函數庫,但

原创 【算法】算法圖解筆記_散列表

線性查找的時間複雜度O(n),二分查找爲O(logn),有沒有時間複雜度爲O(1)的查找嗎? 當然有,這就是散列表。 散列函數 散列函數“將輸入映射到數字”。其必須滿足一些要求。 它必須是一致的。對於同樣的輸入,輸出必須是一樣的。 最理想

原创 【現代C++】"可選"在C++中的表達--std::optional<>

背景 我們在很多編程場合下都需要用到“可選”的概念,比如可選的參數,可選的返回值等。但對這一方面,傳統C/C++支持得略顯不足。下面通過幾個實例說明這一問題。 二分查找 在二分查找算法中,有可能我們要查找的值不在集合裏,這時我們該怎麼表示呢

原创 【算法】算法圖解筆記_快速排序

分而治之 分而治之(divide and conquer,D&C)是一種著名的遞歸式問題解決方法。只能解決一種問題的算法畢竟用處有限,而D&C提供瞭解決問題的思路,是另一個可供你使用的工具。 D&C算法是遞歸的。使用D&C解決問題的過程包括

原创 【算法】算法圖解筆記_遞歸

遞歸是個有意思的概念,正如在前面所說,遞歸能讓算法的可讀性大大提高,而且通常要比使用循環結構更能寫出準確的算法。這本書形象引入了遞歸,並沒有太深入,所以我進行了一點“添油加醋”。 遞歸 概念 遞歸其實就是自己調用自己。可以從多種維度對遞歸分

原创 【算法】算法圖解筆記_選擇排序

選擇排序是下一章將介紹的快速排序的基石。 內存的工作原理 計算機就像是很多抽屜的集合體,每個抽屜都有地址。fe0ffeeb是一個內存單元的地址。 【細摳起來,這個圖形有問題:實際上,計算機的內存是一維的,而圖形是二維的。】 需要將數據存儲到

原创 【算法】算法圖解筆記_算法簡介

在讀《算法圖解》這本書,這本書有兩個優點: 手繪風格的圖,看着很讓人“入戲”; 算法採用Python語言描述,能更好的表達算法思想。 關於算法的學習有兩點心得: 算法思想最重要,理解了思想,算法是很容易寫出來的,所以儘量不要把過多精力

原创 【現代C++】性能控的工具箱之string_view

本篇文章從string_view引入的背景出發,依次介紹了其相關的知識點及使用方式,然後對常見的使用陷阱進行了說明,最後對該類型做總結。 一、背景 在日常C/C++編程中,我們常進行數據的傳遞操作,比如,將數據傳給函數。當數據佔用的內存較大

原创 【Linux系統編程】快速查找errno錯誤碼信息

我們都知道,errno整型變量被普遍應用於*NIX C的異常處理中,其記錄了最近一次的錯誤碼。通過判斷錯誤碼的值,以此執行不同的錯誤處理,這是C語言典型的異常處理方式。其錯誤名稱,比如EAGAIN、EWOULDBLOCK等,都通過宏定義,頭

原创 對現代C++的一點看法

背景 逛水木社區C++版塊,看到了一篇很有意思的帖子--《C++20會變得陌生》。樓主貼出了分別用C++11 和 C++20編寫的代碼,如下: void cpp_11() { std::vector<int> v{1, 2, 3,

原创 【C++】一種典型隱祕的多次delete的情況

本文介紹分析一種多次delete動態內存的情況。說是典型,是因爲這個問題已經在我兩個同事身上發生過;說是隱祕,是因爲一旦發生問題,靠肉眼很難確定原因。 預備知識 不同於C語言通過malloc和free等函數實現動態內存的分配和釋放,C++引