繁体   English   中英

从 std::vector 初始化 std::string<unsigned char> 导致错误

[英]Initialization of std::string from std::vector<unsigned char> causes error

在 C++ 中,我们可以通过以下方式从另一个向量创建一个向量
std::vector<unsigned char> tmp_1 { &some_vector[i] , &some_vector[j] };

问题:有没有办法对std::string做同样的事情?
类似的东西:

std::string tmp2 { &some_vector[i] , &some_vector[j] };

尝试使用文档中的构造函数总是返回错误;

注意: *some_vector 是无符号字符的向量

UPD :找到答案:有错字,所以试图访问 [-1] 元素。

这个:

std::string tmp2 { &some_vector[i] , &some_vector[j] };

应该适用于std::vector但我更喜欢更具可读性和更安全的解决方案:

std::string tmp2 { std::next( some_container, i ) , std::next( some_container.begin(), j ) };

这应该适用于任何类型的容器,可以转换为char 例如,如果您或其他人后来出于任何原因决定将std::vector<char>替换为std::deque<char> ,那么您的程序将突然变得更加危险,并且用&container[i]悄悄地开始变得不可预测.

std::string几个构造函数,其中一些可用于从std::vector构造字符串,例如:

// using a char* pointer and a size...
std::string tmp2( reinterpret_cast<char*>(&some_vector[i]), j-i );

// using char* pointers as iterators...
std::string tmp2( &some_vector[i], &some_vector[j] );

// using vector iterators...
std::string tmp2( some_vector.begin()+i, some_vector.begin()+j );

现场演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM