I am working with 2 libraries. One takes in and returns std::string
s while the other uses std::vector<unsigned char>
s.
It would be good if I could steal the underlying arrays from std::string
and std::vector<unsigned char>
and be able to move them into each other without the excessive copying.
ATM I use something like:
const unsigned char* raw_memory =
reinterpret_cast<const unsigned char*>(string_value.c_str()),
std::vector<unsigned char>(raw_memory, raw_memory + string_value.size();
And the other way:
std::string(
reinterpret_cast<const char*>(&vector_value[0]),
vector_value.size());
It'd be far better to be able to define a:
std::string move_into(std::vector<unsigned char>&&);
std::vector<unsigned char> move_into(std::string&&);
std::string offers a very different and much expanded interface compared to std::vector<> . While the latter is just a boring old sequence of elements, the former is actually designed to represent a string and therefore offers an assortment of string-related convenience functions.
h functions when you are declaring string with std::string keyword because std::string strings are of basic_string class type and cstring strings are of const char* type.
You can use the initialization using iterators. Have a look here
EDIT: pasting the code so that you don't have to go to ideone. Still leaving the link so that you can play arround with the code
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main() {
string a = "Hello world";
vector<unsigned char> v(a.begin(), a.end());
for (int i= 0 ;i< v.size(); ++i) {
cout << v[i] << endl;
}
string s(v.begin(), v.end());
cout << s << endl;
return 0;
}
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