C++ - 程式設計實踐
opencv影象處理時使用stringstream批量讀取圖片,處理後並儲存
C/C++讀取檔名(Ubuntu)
在Ubuntu系統上需要使用C來獲取指定資料夾下的檔名
https://blog.csdn.net/lsq2902101015/article/details/51373911
https://blog.csdn.net/weixin_41770169/article/details/94566944
C++中如何將string型別轉換為int型別?
#include <string> #include <sstream> // 包含標頭檔案 int main() { std::stringstream str2digit; std::string sint='1', sfloat='1.1', sdouble='1.2'; int dint; float dfloat; double ddouble; str2digit << sint; str2digit >> dint; // string to int str2digit.clear(); str2digit << sfloat; str2digit >> dfloat; // string to float str2digit.clear(); str2digit<< sdouble; str2digit >> ddouble; // string to double std::cout << dint << ", " << dfloat << ", " << ddouble << std::endl; return 0; }
C++遍歷陣列,字串容器
https://blog.csdn.net/hackmind/article/details/24271949
namespace名稱空間
假設這樣一種情況,當一個班上有兩個名叫 Zara 的學生時,為了明確區分它們,我們在使用名字之外,不得不使用一些額外的資訊,比如他們的家庭住址,或者他們父母的名字等等。
同樣的情況也出現在 C++ 應用程式中。例如,您可能會寫一個名為 xyz() 的函式,在另一個可用的庫中也存在一個相同的函式 xyz()。這樣,編譯器就無法判斷您所使用的是哪一個 xyz() 函式。
因此,引入了名稱空間這個概念,專門用於解決上面的問題,它可作為附加資訊來區分不同庫中相同名稱的函式、類、變數等。使用了名稱空間即定義了上下文。本質上,名稱空間就是定義了一個範圍。
C++中this與*this的區別
this *this
return *this返回的是當前物件的克隆或者本身(若返回型別為A, 則是克隆, 若返回型別為A&, 則是本身 )。return this返回當前物件的地址(指向當前物件的指標) 兩個示例如下
#include <iostream> using namespace std; class A { public: int x; A* get() { return this; } }; int main() { A a; a.x = 4; if(&a == a.get()) { cout << "yes" << endl; } else { cout << "no" << endl; } return 0; }
結果為:yes
#include <iostream> using namespace std; class A { public: int x; A get() { return *this; //返回當前物件的拷貝 } }; int main() { A a; a.x = 4; if(a.x == a.get().x) { cout << a.x << endl; } else { cout << "no" << endl; } if(&a == &a.get()) { cout << "yes" << endl; } else { cout << "no" << endl; } return 0; }
結果為:
4
no
最後, 如果返回型別是A&, 那麼return *this返回的是當前物件本身(也就是其引用), 而非副本。
C++ 指標
int var = 20 宣告一個數值
int *a 宣告一個指標
a = &var // 在指標變數中儲存 var 的地址
cout << *ip 輸出var
operate運算子轉換
c++ const用法
一,const修飾符用於指標
第一種方法是讓指標指向一個常量物件,這樣可以防止使用該指標來修改所指向的值,第二種方法是將指標本身宣告為常量,這樣可以防止改變指標的位置。
宣告一個指向常量的指標a:
int y = 1;
const int * a = &y;
該宣告指出,a指向一個const int,這裡為1,因此不能使用a來修改這個值。換句話說,*a的值為const,不能被修改,但是a的宣告並不意味著它指向的值實際上就是一個常量,而只是意味著對a而言,這個值是常量。a指向y,而y不是const,可以通過y變數來修改y的值,但不能使用a指標來修改。
const int m = 9;
const int * n = &m; // (1)
int * t = &m; //(2)
上面的(1)和(2)中看到了什麼,(2)將const的地址賦給了常規指標,(1)將const地址賦給了const指標,這兩張是否正確呢,答案顯然(2)不對,因為C++禁止將const的地址賦給非const指標,如果非要這樣做,只能使用強制型別轉換來突破這種限制。
行內函數 inline
行內函數一般放在標頭檔案裡面
有時候進出函式的開銷比函式本身還大,所以變為行內函數。用巨集可能會有bug。
static靜態成員
類內靜態成員變數:靜態成員函式主要為了呼叫方便,不需要生成物件就能呼叫。
class X { public: void MethodA(); static void MethodB(); }
此時MethodB可以直接呼叫,X::MethodB();
MethodA必須先生成類物件才能呼叫,X x; x.MethodA();