2013-03-29 18 views
4

如何將C char **轉換爲C++向量?是否有一些內置功能可以用來做到這一點,還是通過一系列迭代步驟完成它更好?將未知長度的char **(c)轉換爲向量<string>(C++)

編輯:由於各種原因,C數組中的元素數量未知。我可以將其作爲另一個參數傳遞,但這是絕對必要的嗎?

+0

另請參見[將c數組字符串複製到std :: string向量中](http://stackoverflow.com/q/6307584/1168156) – LihO

+0

而[C++複製字符串數組到'vector ']( http://stackoverflow.com/q/5839499/1168156) – LihO

+0

和[將一個null終止的const char *字符串數組轉換爲一個'std :: vector '](http://stackoverflow.com/q/4464208/ 1168156) – LihO

回答

16

您可以簡單地使用的std::vector帶有兩個迭代器的構造:

const char* arr[] = {"Hello", "Friend", "Monkey", "Face"}; 
std::vector<std::string> v(std::begin(arr), std::end(arr)); 

或者,如果你真的有一個const char**

const char** p = arr; 
std::vector<std::string> v(p, p + 4); 

這也將一起工作由於數組到指針的轉換,直接使用arr而不是p

+0

@LihO哎呀。謝謝! –

8
char** c; 
vector<string> v(c, c + 10); 

將從給定範圍的元素構造元素。 10是元素個數這裏

+0

這裏的假設和所有的答案是,元素的數量是已知的... – MirroredFate

+1

@MirroredFate,你應該總是知道c樣式數組中元素的數量(或者指針指向連續的元素)。在其他情況下,你什麼都不能做(除非刪除,如果你知道它是新的,並且如果它被malloc化了,就會變綠) – RiaD

0

這一個班輪是捕獲命令行參數有用...

int 
main(int argc, char ** argv) 
{ 
    std::vector<std::string> arguments(argv, argv + argc); 
} 
1

可以使用constructor of std::vector接受兩個迭代器,又名範圍內構造

char* strings[] = {"aaa", "bbb", "ccc", "ddd"}; 
std::vector<std::string> v(strings, strings + 4); 

其中4是數組的大小。在該具體示例中,strings數組的大小的計算將是也可以通過使用sizeof operator

int len = sizeof(strings)/sizeof(char*); 
std::vector<std::string> v2(strings, strings + len); 

這將是不可能的純char**雖然因爲數組的大小不能夠直接檢索從一個指針以任何方式(也值得去讀一些關於array decaying)。