gen*_*jix 12 c++ string vector std unsigned-char
我正在使用2个库.一个接受并返回std::strings而另一个使用std::vector<unsigned char>s.
这将是很好的,如果我可以从偷底层阵列std::string和std::vector<unsigned char>并能够将其移动到对方没有过多的复制.
ATM我使用的东西如下:
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();
Run Code Online (Sandbox Code Playgroud)
另一种方式:
std::string(
reinterpret_cast<const char*>(&vector_value[0]),
vector_value.size());
Run Code Online (Sandbox Code Playgroud)
能够定义一个以下内容会好得多:
std::string move_into(std::vector<unsigned char>&&);
std::vector<unsigned char> move_into(std::string&&);
Run Code Online (Sandbox Code Playgroud)
izo*_*ica 11
您可以使用迭代器来初始化.看看这里
编辑:粘贴代码,以便您不必去ideone.仍然保留链接,以便您可以使用代码进行循环播放
#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;
}
Run Code Online (Sandbox Code Playgroud)
这是不可能的.
在vector和string类不提供方式,从什么比别人窃取vector或string 分别.它们并不意味着交换内容.
问题在于vector并且string可能具有广泛不同的基础表示.通常在gcc中,string使用旧的COW(Copy On Write)"优化",它与典型的vector表示(通常只是指针/ size_t属性的三倍)有很大不同.
如果你正在处理原始字节,请责怪决定将它们放入的库,string如果可以的话,重构它.
否则:复制.本reinterpret_cast不应该是必要的,因为char和unsigned char它们之间有隐式类型转换(现在char通常是unsigned默认情况下).
| 归档时间: |
|
| 查看次数: |
17886 次 |
| 最近记录: |