How would one go about converting a C char** to a C++ vector? Is there some built-in functionality one can utilize to do this, or is it better to accomplish it through a series of iterative steps?
EDIT: For various reasons, the number of elements in the C array is unknown. It is possible I could pass that as another parameter, but is that absolutely necessary?
You can simply use the constructor of std::vector
that takes two iterators:
const char* arr[] = {"Hello", "Friend", "Monkey", "Face"};
std::vector<std::string> v(std::begin(arr), std::end(arr));
Or if you really have a const char**
:
const char** p = arr;
std::vector<std::string> v(p, p + 4);
Which will also work with directly using arr
instead of p
due to array-to-pointer conversion.
char** c;
vector<string> v(c, c + 10);
Will construct elements from element of given range. 10 is number of elements here
You can use the constructor of std::vector
that takes two iterators, a.k.a. the range constructor:
char* strings[] = {"aaa", "bbb", "ccc", "ddd"};
std::vector<std::string> v(strings, strings + 4);
where 4
is the size of your array. In this concrete example, the calculation of the size of the strings
array would be also possible by using sizeof
operator:
int len = sizeof(strings)/sizeof(char*);
std::vector<std::string> v2(strings, strings + len);
which wouldn't be possible with pure char**
though since the size of the array can not be directly retrieved from a pointer in any way (also worth to read something about array decaying).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With