读书人

怎么获取vecotr的元素区首地址

发布时间: 2013-04-21 21:18:07 作者: rapoo

如何获取vecotr的元素区首地址?


vecotr使用起来非常方便,但是现在遇到一个问题是.
需要直接操作其元素区的首地址进行IO操作,避免多余的内存拷贝.
例如: 
fwrite(buf,size,fd);
希望这个buf直接就是vector数据的首地址. 避免去内存拷贝.

但是看了半天一直也没有找到方法.

还请各位仁兄指点. 
[解决办法]
看看MSDN上的这个关于vector::data方法的例子

#include <vector>
#include <iostream>

int main()
{
using namespace std;
vector<int> c1;
vector<int>::pointer c1_Ptr;
vector<int>::const_pointer c1_cPtr;

c1.push_back(1);
c1.push_back(2);

cout << "The vector c1 contains elements:";
c1_cPtr = c1.data();
for (size_t n = c1.size(); 0 < n; --n, c1_cPtr++)
{
cout << " " << *c1_cPtr;
}
cout << endl;

cout << "The vector c1 now contains elements:";
c1_Ptr = c1.data();
*c1_Ptr = 20;
for (size_t n = c1.size(); 0 < n; --n, c1_Ptr++)
{
cout << " " << *c1_Ptr;
}
cout << endl;
}

[解决办法]
迭代器不行吗
[解决办法]
vector a;
a[0]不就是么..费那么大得劲 你想干什么
[解决办法]
1.如果需要传递vector,一般都使用引用,避免复制;
2.如果需要操作vector,一般都使用迭代器;
3.如果你需要操作vector的第一个元素,直接取出来就行了,有必要那么纠结?
[解决办法]
引用:
1.如果需要传递vector,一般都使用引用,避免复制;
2.如果需要操作vector,一般都使用迭代器;
3.如果你需要操作vector的第一个元素,直接取出来就行了,有必要那么纠结?


对于前两条,顶了吧.....
[解决办法]
基本类型是可以这样用的,是你写得有问题吧,试试下面的程序:

#include <cstring>
#include <iostream>
#include <vector>
using namespace std;

#define COUNT(10)

int main(void)
{
vector<int> v;
int a[COUNT];

for(int i = 0; i < COUNT; i++)
v.push_back(i);
memcpy(a, &v[0], COUNT * sizeof(int));
for(int i = 0; i < COUNT; i++)
cout << a[i] << ' ';
cout << endl;

return 0;
}


引用:
真麻烦,后面直接用一个数组来解决了。 想那么多方法结果还是回归C的方法来做简单。


引用:直接取第0个元素的地址,比如&buf[0]

这个不管我试过了。程序崩溃了。

读书人网 >C++

热点推荐