私はある時点で整数の配列とサイズへの生のポインタを与える外部ライブラリを使用しています。
ここstd::vector
で、これらの値に直接アクセスして変更するために、生のポインタでアクセスするのではなく、を使用したいと思います。
ポイントを説明する人工的な例はここにあります:
size_t size = 0;
int * data = get_data_from_library(size); // raw data from library {5,3,2,1,4}, size gets filled in
std::vector<int> v = ????; // pseudo vector to be used to access the raw data
std::sort(v.begin(), v.end()); // sort raw data in place
for (int i = 0; i < 5; i++)
{
std::cout << data[i] << "\n"; // display sorted raw data
}
予想される出力:
1
2
3
4
5
その理由は、<algorithm>
そのデータに(要素の並べ替え、交換など)のアルゴリズムを適用する必要があるためです。
一方、そのベクトルのサイズを変更しても変更されることはないためpush_back
、そのベクトルを操作するためerase
にinsert
、、は必要ありません。
ライブラリからのデータに基づいてベクトルを構築し、そのベクトルを変更してデータをライブラリにコピーして戻すことができますが、データセットが非常に大きくなる可能性があるため、避けたい2つの完全なコピーになります。
std::vector
。
sort(arrayPointer, arrayPointer + elementCount);
。
std::vector_view
ものですよね?