- 论坛徽章:
- 0
|
// 拷贝数据到s(参见条款5)
事实上,让C风格API把数据放入一个vector,然后拷到你实际想要的STL容器中的主意总是有效的:
size_t fillArray(double *pArray, size_t arraySize); // 同上
vector<double> vd(maxNumDoubles); // 一样同上
vd.resize(fillArray(&vd[0], vd.size()));
deque<double> d(vd.begin(), vd.end()); // 拷贝数据到deque
list<double> l(vd.begin(), vd.end()); // 拷贝数据到list
set<double> s(vd.begin(), vd.end()); // 拷贝数据到set
此外,这也提示了vector和string以外的STL容器如何将它们的数据传给C风格API。只要将容器的每个数据拷
到vector,然后将它们传给API:
void doSomething(const int* pints, size_t numInts); // C API (同上)
set<int> intSet; // 保存要传递给API数据的set
...
vector<int> v(intSet.begin(), intSet.end()); // 拷贝set数据到vector
if (!v.empty()) doSomething(&v[0], v.size()); // 传递数据到API
你也可以将数据拷进一个数组,然后将数组传给C风格的API,但你为什么想这样做?除非你在编译期就知道
容器的大小,否则你不得不分配动态数组,而条款13解释了为什么你应该总是使用vector来取代动态分配的数
组。 |
|