我正在构建一个 C++ 类,它包装了一个用于数据库访问的 C 风格 api。它的层次结构,其中每条测量线都包含许多数据通道。每个通道都作为一个包含许多点的数组进行存储和传递。我想在我的类中使用向量,但是 api 给了我一个指向内存中数组的指针,然后手动将数据复制到我的向量中,然后在处理后再次复制出来是没有意义的。
是否有另一个类或向量的后代能够接受指向数据的指针?我曾短暂考虑过编写自己的向量类,但我是 C++ 的菜鸟,看了向量模板后我被吓到了。
我正在构建一个 C++ 类,它包装了一个用于数据库访问的 C 风格 api。它的层次结构,其中每条测量线都包含许多数据通道。每个通道都作为一个包含许多点的数组进行存储和传递。我想在我的类中使用向量,但是 api 给了我一个指向内存中数组的指针,然后手动将数据复制到我的向量中,然后在处理后再次复制出来是没有意义的。
是否有另一个类或向量的后代能够接受指向数据的指针?我曾短暂考虑过编写自己的向量类,但我是 C++ 的菜鸟,看了向量模板后我被吓到了。
将我的评论以“答案”形式...
由于复制数组不是选项,因此 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
将数组分配给向量并不难。它确实需要复制,但这是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;
}
在您的情况下,将指针数组复制到向量中非常快,因为指针仅占用一个内存位置。如果您要复制复杂的对象,那将是另一回事...
这看起来像是您问题的答案;https://stackoverflow.com/a/15141661/1546600 您可以创建一个空向量并为其分配一个现有数组。