我无法找到这个问题,这是我面临的一个实际问题。如何将std :: vector <unsigned char>转换为矢量<char>而不进行复制?
我有一个文件加载实用程序,返回std::vector<unsigned char>
包含整个文件的内容。 但是,处理函数需要连续数组char
(并且不能被改变 - 这是一个库函数)。由于使用处理函数的类无论如何都存储数据的副本,因此我想将其存储为vector<char>
。这里的代码可能更具说明性。
std::vector<unsigned char> LoadFile (std::string const& path);
class Processor {
std::vector<char> cache;
void _dataOperation(std::vector<char> const& data);
public:
void Process() {
if (cache.empty())
// here's the problem!
cache = LoadFile("file.txt");
_dataOperation(cache);
}
};
此代码不编译,因为(显然)没有适当的转换。然而,我们可以肯定,临时向量将占用相同数量的内存(IOW sizeof(char) == sizeof(unsigned char)
)
幼稚的解决方案是迭代临时内容并投射每个字符。我知道在正常情况下,operator= (T&&)
将被调用。
在我的情况下,重新解释转换是安全的,因为我相信我只会读取ASCII字符。无论如何,任何其他角色都会在_dataOperation
中被捕。
所以,我的问题是:如何正确和安全地转换临时向量的方式,不涉及复制?
如果这是不可能的,我宁愿复制的安全方式,而不是不安全的非复制。我也可以更换LoadFile
返回vector<char>
或vector<unsigned char>
。
如果你控制'_dataOperation'的代码,如果你使'vector'长期运行,你可能会更快乐。 –
zwol
@Zack不幸的是,我没有。这是一个库函数。我将编辑该问题。 –
没有_safe_的方式 –