0

データベースアクセス用にCスタイルのAPIをラップするC++クラスを構築しています。その階層的で、各調査ラインには多くのデータチャネルが含まれています。各チャネルは、多くのポイントの配列として格納および渡されます。クラスでベクトルを使用したいのですが、APIはメモリ内の配列へのポインタを提供し、データを手動でベクトルにコピーしてから、処理後に再度出力しても意味がありません。

データへのポインタを受け入れる機能を持つ別のクラスまたはベクトルの子孫はありますか?私は自分のベクトルクラスを書くことを簡単に考えましたが、私はc ++の初心者であり、ベクトルテンプレートを見て怖がりました。

4

3 に答える 3

3

私のコメントを「回答」形式に入れて...

配列をコピーすることはオプションではないので、avectorはおそらくあなたが探しているものではありません。標準のアルゴリズムを使用するだけの場合は、生の配列ポインターもイテレーターであるため、引数として使用できます。例:

#include <algorithm>
#include <iostream>
#include <iterator>

int main()
{
  int a[] = { 2, -1, 7, 6 };

  int * const begin = a;
  int * const end   = a + sizeof(a) / sizeof(a[0]);

  std::sort(begin, end);
  std::copy(begin, end, std::ostream_iterator<int>(std::cout, "\n"));
}

結果は次のようになります。

$ g++ foo.cpp ; ./a.out 
-1
2
6
7
于 2012-06-26T22:52:51.497 に答える
0

これはあなたの質問に対する答えのように見えます。https://stackoverflow.com/a/15141661/1546600 空のベクトルを作成し、それに既存の配列を割り当てることができます。

于 2013-03-04T14:11:35.747 に答える
0

配列をベクトルに代入することはそれほど難しくありません。コピーが必要ですが、これは の標準機能ですstd::vector<>。このようなものが法案に合うかもしれません。

using namespace std;

void WriteInt (int i) { cout << " " << i; }

int _tmain(int argc, _TCHAR* argv[])
{
    int myInts[] = { 1, 2, 3, 4, 5 };
    vector<int> myVectorOfInts(5);
    myVectorOfInts.assign(&myInts[0], &myInts[5]);
    for_each(myVectorOfInts.begin(), myVectorOfInts.end(), WriteInt);

    getchar();
    return 0;
}

あなたの場合、ポインターの配列をベクターにコピーするのは非常に高速です。これは、ポインターが 1 つのメモリ ロケーションしか占有しないためです。複雑なオブジェクトをコピーしている場合、それは別の問題になります...

于 2012-06-26T22:08:25.650 に答える