簡體   English   中英

向量 <string> 或矢量 <char *> ?

[英]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* numbernumber引用指向存儲該值的內存塊的指針,並假設它是一個int並將鎖定該內存塊的那種類型。 但是你可以在該內存塊中存儲一個char 'C' ,但它會拋出一個編譯錯誤,因為它說你無法在該char上執行那些int函數。

要將string傳遞給期望const char *string ,請使用stringc_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM