从std :: vector <unsigned char =“”> C ++初始化std :: string

时间:2018-04-10 17:58:09

标签: c++ vector stdstring

在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]元素。

2 个答案:

答案 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::stringseveral 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 );

Live Demo