如何將C char **轉換爲C++向量?是否有一些內置功能可以用來做到這一點,還是通過一系列迭代步驟完成它更好?將未知長度的char **(c)轉換爲向量<string>(C++)
編輯:由於各種原因,C數組中的元素數量未知。我可以將其作爲另一個參數傳遞,但這是絕對必要的嗎?
如何將C char **轉換爲C++向量?是否有一些內置功能可以用來做到這一點,還是通過一系列迭代步驟完成它更好?將未知長度的char **(c)轉換爲向量<string>(C++)
編輯:由於各種原因,C數組中的元素數量未知。我可以將其作爲另一個參數傳遞,但這是絕對必要的嗎?
您可以簡單地使用的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
。
@LihO哎呀。謝謝! –
char** c;
vector<string> v(c, c + 10);
將從給定範圍的元素構造元素。 10是元素個數這裏
這裏的假設和所有的答案是,元素的數量是已知的... – MirroredFate
@MirroredFate,你應該總是知道c樣式數組中元素的數量(或者指針指向連續的元素)。在其他情況下,你什麼都不能做(除非刪除,如果你知道它是新的,並且如果它被malloc化了,就會變綠) – RiaD
這一個班輪是捕獲命令行參數有用...
int
main(int argc, char ** argv)
{
std::vector<std::string> arguments(argv, argv + argc);
}
可以使用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)。
另請參見[將c數組字符串複製到std :: string向量中](http://stackoverflow.com/q/6307584/1168156) – LihO
而[C++複製字符串數組到'vector']( http://stackoverflow.com/q/5839499/1168156) –
LihO
和[將一個null終止的const char *字符串數組轉換爲一個'std :: vector'](http://stackoverflow.com/q/4464208/ 1168156) –
LihO