Time of Update: 2017-01-19
在編寫多線程程式時,多個線程同時訪問某個共用資源,會導致同步的問題,這篇文章中我們將介紹 C++11 多線程編程中的資料保護。資料丟失讓我們從一個簡單的例子開始,請看如下代碼: #include <iostream>#include <string>#include <thread>#include <vector> using std::thread;using std::vector;using
Time of Update: 2017-01-19
C++11 引入一個全新的線程庫,包含啟動和管理線程的工具,提供了同步(互斥、鎖和原子變數)的方法,我將試圖為你介紹這個全新的線程庫。如果你要編譯本文中的代碼,你至少需要一個支援 C++11 的編譯器,我使用的是 GCC 4.6.1,需要使用 -c++0x 或者 -c++11 參數來啟用 C++11 的支援。啟動線程在 C++11 中啟動一個線程是非常簡單的,你可以使用 std:thread
Time of Update: 2017-01-19
我們先通過一個簡單的代碼來瞭解該問題。同步問題我們使用一個簡單的結構體 Counter,該結構體包含一個值以及一個方法用來改變這個值: struct Counter { int value; void increment(){ ++value; }};然後啟動多個線程來修改結構體的值: int main(){ Counter counter; std::vector<std::thread> threads; for(int i
Time of Update: 2017-01-19
介紹在 C++ 中通過一個全域函數來綁定到對象的成員函數是很有用的,這個特性也存在於其他語言中,例如 C#的委派。在 C++ 中相當於成員函數指標,但是 並沒有提供相應的特性。在這篇文章中,我想提出一個簡單的 C++ 委派的實現,是用 C++ 成員函數指標和 C++11 的可變模板(variadic templates),目前這套實現方法僅支援 GNU C++ 4.7.0,在 Windows 下可使用
Time of Update: 2017-01-19
本文執行個體講述了C++實現目前時間動態顯示的方法。分享給大家供大家參考。具體如下:/* 24-06-10 10:44 動態顯示時間 但不是最優的 功能很單一 本程式關鍵是對時鐘函數的使用 **tm結構定義了 年、月、日、時、分、秒、星期、當年中的某一天、夏令時 **用localtime擷取當前系統時間,該函數將一個time_t時間轉換成tm結構表示的時間,函數原型: struct tm * localtime(const time_t *)
Time of Update: 2017-01-19
本文執行個體講述了C++歸併演算法。分享給大家供大家參考。具體如下:/* 歸併演算法:把兩個或兩個以上的線性表合并在一起,形成一個新的線性表 函數模版的基本使用 程式意圖:將兩個相同類型的線性表元素排好序,然後將他們組合成一個排好的線性表 */#include <iostream>using namespace std;const int n = 5; //5個元素 //輸出資料元素template <class T1>void OutPut(T1 out[(2*n)]
Time of Update: 2017-01-19
本文執行個體講述了C++雙向迴圈列表用法。分享給大家供大家參考。具體如下:/* 雙向迴圈鏈表 */#include <iostream>using namespace std;//結構體構造鏈表的指標域和資料域struct ChainNode{ int data; //節點資料 ChainNode *left; //節點的前驅指標 ChainNode *right; //節點的後繼指標 };////////////建立n個雙向迴圈鏈表 並返回鏈表頭指標/////////
Time of Update: 2017-01-19
一、簡介時間處理在編程中經常遇到,包括程式的已耗用時間和顯示時間等。在標準C中, 日期和時間的處理包含在 time.h 的標頭檔中,需要使用日期和時間相關的類型的函數的話, 需要匯入time.h.二、執行個體1、計算時差#include <stdio.h> #include <sys/time.h> #include <unistd.h> int main(){
Time of Update: 2017-01-19
本文執行個體講述了C++隊列用法。分享給大家供大家參考。具體如下:/* 隊列使用時必須包含標頭檔 #include <queue> 有以下幾種方法 入隊push(),出隊pop(), 讀取隊首元素front(),讀取隊尾元素back() , 判斷隊是否有元素empty() 求隊列元素個數size() */#include <iostream>#include <queue>using namespace std;int main(){
Time of Update: 2017-01-19
本文執行個體講述了C++判斷矩形相交的方法。分享給大家供大家參考。具體如下:已知2矩形原點和寬高,判斷2矩形相交,相交矩形相交判斷原理:假定矩形是用一對點表達的(minx, miny) (maxx, maxy),那麼兩個矩形 rect1{(minx1, miny1)(maxx1, maxy1)} rect2{(minx2, miny2)(maxx2, maxy2)}
Time of Update: 2017-01-19
多麼令人愉快的一個問題啊就在被帶到編譯器那裡之前,前置處理器都會對你的原始碼瞧上一瞧, 做一些格式化的工作,並執行任何你在原始碼裡面留給它來執行的指令.像什麼?好吧,前置處理器的指令就被叫做前置處理器指令,而他們都以一個#開頭.像 #include 這樣?正確.每一個被前置處理器遇到的 # 命令都會導致在某種方式上對原始碼的修改.
Time of Update: 2017-01-19
必要的準備工作及注意事項:在開始之前需要做以下工作: 一個C編譯器——我使用了 clang 3.4,也可以用其它支援 c99/c11 的編譯器; 文字編輯器——我建議使用基於IDE的文字編輯器,我使用 Emacs; 基礎編程知識——最基本的變數,流程式控制制,函數,資料結構等; Make
Time of Update: 2017-01-19
本文執行個體講述了C++非遞迴隊列實現二叉樹的廣度優先遍曆。分享給大家供大家參考。具體如下:廣度優先非遞迴二叉樹遍曆(或者說層次遍曆):void widthFirstTraverse(TNode* root) { queue<TNode*> q; // 隊列 q.enqueue(root); TNode* p; while(q.hasElement()) { p = q.dequeue(); // 隊首元素出隊列 visit(p); // 訪問p結點
Time of Update: 2017-01-19
本文執行個體講述了C語言實現的程式員老黃曆。分享給大家供大家參考。具體如下:以前看到過一個jquery程式員老黃曆頁面,覺得挺有創意的,自己閑著用C語言也寫了一個,基本就是隨機數的產生,沒什麼難度,大家隨便看看,高手請繞過此篇,控制台程式沒什麼美觀可言,已經盡量弄得好看點了。#include <stdio.h>#include <time.h>int random(int dayseed,int indexseed)//根據目前時間“天 ”產生偽隨機數。 { int
Time of Update: 2017-01-19
一、 定義: sizeof是C/C++中的一個操作符(operator),簡單的說其作用就是返回一個對象或者類型所佔的記憶體位元組數。其傳回值類型為size_t,在標頭檔stddef.h中定義。在32位系統中:char的sizeof值為1,char是我們編程能用的最小資料類型。short的sizeof值為2; int、float、long為4;double為8;所有的指標的sizeof值都為4。二、文法:sizeof有三種文法形式,如下:1) sizeof( object ); //
Time of Update: 2017-01-19
C++的記憶體劃分為棧區、堆區、全域區/靜態區、字串常量和代碼區。這裡去掉自由儲存區,增加了代碼區,理由會在下面講到。棧區:由系統進行記憶體的管理。說明:主要存放函數的參數以及局部變數。棧區由系統進行記憶體管理,在函數完成執行,系統自行釋放棧區記憶體,不需要使用者管理。整個程式的棧區的大小可以在編譯器中由使用者自行設定,預設的棧區大小為3M。全域/靜態區:全域、待用資料存放在一起的,初始化的全域變數和靜態變數是在一起的。未初始化的全域變數和靜態變數是在相鄰的空間中。說明:全域變數和靜態全域變數的
Time of Update: 2017-01-19
vector是C++標準模版庫(STL,Standard Template Library)中的部分內容。之所以認為是一個容器,是因為它能夠像容器一樣存放各種類型的對象,簡單的說:vector是一個能夠存放任意類型的動態數組,能夠增加和壓縮資料。使用vector容器之前必須加上<vector>標頭檔:#include<vector>;vector屬於std命名域的內容,因此需要通過命名限定:using std::vector;也可以直接使用全域的命名空間方式:using
Time of Update: 2017-01-19
C++實現簡單的學生管理系統//Student.cpp#include<iostream> using namespace std; struct Stu{ char no[10]; char name[16]; int math; int chi; double ave;}; class Student{public: Stu st; Student * next;public: Student(){} Student(Stu s) { st=s;
Time of Update: 2017-01-19
定義:使用覆蓋技術,幾個變數相互覆蓋,從而使幾個不同變數共占同一段記憶體的結構,成為共同體類型的結構。共同體的定義類似結構體,不過共同體的所有成員都在同一段記憶體中存放,起始地址一樣,並且同一時刻只能使用其中的一個成員變數。聲明共用體的一般形式為:複製代碼 代碼如下:union 共用體類型名{ 成員列表};定義共用體變數的一般形式為:共用體類型名 共用體變數名;例如:複製代碼 代碼如下:union
Time of Update: 2017-01-19
類是對象的抽象,我們可以使用一個類來定義很多的對象,然後每個對象都有自己的屬性。當我們使用類來定義很多相同結構的對象的時候,我們可以採取對象數組的方法。例如,一個班有50個學生,我們定義了一個學生類,該類的學生具有相同的資料成員和成員函數,我們就可以定義一個這樣的數組。複製代碼 代碼如下:Student stdu[50];//假設已經聲明了Student類,定義stud數組,有50個元素======================對象數組的初始化=========================