[英]vector<string> or vector<char *>?
題:
有什么區別 :
vector<string>
和vector<char *>
? 我如何將數據類型的值: string
傳遞給函數,具體接受:
const char *
? 例如 :
vector<string> args(argv, argv + argc);
vector<string>::iterator i;
void foo (const char *); //*i
vector<char *>
:我將不得不復制數據以及指針 感謝您的投入!
這實際上與矢量沒有任何關系。
char*
是一個指針,它可能指向也可能不指向有效的字符串數據。
std::string
是一個字符串類,封裝了構成字符串的所有必需數據,以及分配和釋放功能。
如果將std::string
存儲在向量中或其他任何位置,那么一切都會正常工作 。
如果存儲char指針,則必須完成分配和釋放內存的所有艱苦工作,並確保指針只指向有意義的字符串數據,並確定字符串的長度等等。
由於許多C API以及C ++標准庫的一部分都需要char*
,因此string
類具有返回char*
的c_str()
函數。
char*
實際上是一個指向char
類型值的指針,它定義了使用該值可以做什么和不可以做什么。 你可以使一個int* number
和number
引用指向存儲該值的內存塊的指針,並假設它是一個int
並將鎖定該內存塊的那種類型。 但是你可以在該內存塊中存儲一個char
'C'
,但它會拋出一個編譯錯誤,因為它說你無法在該char
上執行那些int
函數。
要將string
傳遞給期望const char *
的string
,請使用string
的c_str()
成員,該成員返回以null結尾的字符串:
string s = "foobar";
int n = strlen( s.c_str() );
foo(i->c_str());
來自http://www.cplusplus.com/reference/string/string/ :
字符串對象是一種特殊類型的容器,專門設計用於操作字符序列。
與傳統的c字符串不同,傳統的c字符串僅僅是存儲器數組中的字符序列,C ++字符串對象屬於具有許多內置功能的類,以更直觀的方式操作字符串,並具有C ++容器常用的一些其他有用功能。
char*
是一個指向角色的指針,僅此而已。
您可以使用c_str()
傳遞const char*
所需的數據。
至於復制,如果你復制數據,你將有一個新的字符串位置,因此是一個新的指針。
我會使用vector< string >
,只是因為查找是基於值的而不是基於地址的。 但是, vector< char* >
會更快,所以每個都有它的好處。
vector<char *>
聽起來不錯! 除非您的程序在內存有限的系統中運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.