0

我正在构建一个 C++ 类,它包装了一个用于数据库访问的 C 风格 api。它的层次结构,其中每条测量线都包含许多数据通道。每个通道都作为一个包含许多点的数组进行存储和传递。我想在我的类中使用向量,但是 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

将数组分配给向量并不难。它确实需要复制,但这是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;
}

在您的情况下,将指针数组复制到向量中非常快,因为指针仅占用一个内存位置。如果您要复制复杂的对象,那将是另一回事...

于 2012-06-26T22:08:25.650 回答
0

这看起来像是您问题的答案;https://stackoverflow.com/a/15141661/1546600 您可以创建一个空向量并为其分配一个现有数组。

于 2013-03-04T14:11:35.747 回答