在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是无符号字符的向量
尝试 - 在xstring
UPD :找到答案:打字错误,试图访问[-1]元素。
答案 0 :(得分: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]
悄然开始无法预测。
答案 1 :(得分:1)
std::string
有several constructors,其中一些可用于构建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 );