是否有快速(CPU)方法將char
數組轉換爲std::vector<char>
?將char *轉換爲std :: vector
我的功能看起來是這樣的:
void someFunction(char* data, int size)
{
// Now here I need to make the std::vector<char>
// using the data and size.
}
是否有快速(CPU)方法將char
數組轉換爲std::vector<char>
?將char *轉換爲std :: vector
我的功能看起來是這樣的:
void someFunction(char* data, int size)
{
// Now here I need to make the std::vector<char>
// using the data and size.
}
你不能「投」什麼在這裏,但你可以容易地從C字符串數組:
std::vector<char> v(data, data + size);
這將創建一個儘管複製。
STL容器的一般規則是它們製作其內容的副本。在C++ 11中,有一些將元素移動到容器中的特殊方法(例如,emplace_back()
的成員函數std::vector
),但在您的示例中,元素是char
對象,因此您仍然要將每個size
char
對象。
將std::vector
想象爲指向數組的指針和數組長度的包裝。 「將char *
投射到std::vector<char>
」最接近的等效方法是使用給定的指針和長度替換矢量的指針和長度,但是指定了長度(兩種可能性是指向結束元素之後的值的指針或size_t
值)。沒有std::vector
的標準成員函數,您可以使用它來交換其內部數據與給定的指針和長度。
雖然這是很好的理由。 std::vector
爲其包含的每個元素實現所有權語義。其底層陣列分配了一些分配器(第二個模板參數),默認爲std::allocator
。如果允許您將內部成員換出,那麼您需要確保使用相同的堆分配例程集。此外,您的STL實現需要修復存儲矢量「長度」的方法,而不是不指定此詳細信息。在面向對象的世界中,指定比所需更多的細節通常會被忽視,因爲它會導致更高的耦合。
但是,假設您的STL實現存在這樣的成員函數。在你的例子中,你根本不知道如何分配data
,所以你可能會無意中給出了一個指向堆分配的內存的指針,這個分配器沒有用期望的分配器分配。例如,data
可能已被分配爲malloc
,而該向量可以用delete
釋放內存。使用不匹配的分配和釋放例程會導致未定義的行爲。您可能會要求someFunction()
只接受分配給特定分配例程的數據,但這是指定了比必要的更多細節。
希望我已經使我的情況下,一個std::vector
成員函數,掉出內部數據成員不是一個好主意。如果你真的需要從data
和size
一個std::vector<char>
,你應該建立一個有:
std::vector<char> vec(data, data + size);
你需要的字符的載體是什麼? – Griwes