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

cheidtf 2013-04-11 01:16:00


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

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

还请各位仁兄指点. 
...全文
338 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
taodm 2013-04-11
  • 打赏
  • 举报
回复
楼主,还是买本effective stl 认真啃啃吧,你现在问的和即将要问的都有答案了。
图灵狗 2013-04-11
  • 打赏
  • 举报
回复
基本类型是可以这样用的,是你写得有问题吧,试试下面的程序:

#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;
}
引用 9 楼 cheidtf 的回复:
真麻烦,后面直接用一个数组来解决了。 想那么多方法结果还是回归C的方法来做简单。 引用 1 楼 turingo 的回复:直接取第0个元素的地址,比如&amp;buf[0] 这个不管我试过了。程序崩溃了。
cheidtf 2013-04-11
  • 打赏
  • 举报
回复
真麻烦,后面直接用一个数组来解决了。 想那么多方法结果还是回归C的方法来做简单。
引用 1 楼 turingo 的回复:
直接取第0个元素的地址,比如&buf[0]
这个不管我试过了。程序崩溃了。
m4a1sas 2013-04-11
  • 打赏
  • 举报
回复
引用 7 楼 super_admi 的回复:
1.如果需要传递vector,一般都使用引用,避免复制; 2.如果需要操作vector,一般都使用迭代器; 3.如果你需要操作vector的第一个元素,直接取出来就行了,有必要那么纠结?
对于前两条,顶了吧.....
super_admi 2013-04-11
  • 打赏
  • 举报
回复
1.如果需要传递vector,一般都使用引用,避免复制; 2.如果需要操作vector,一般都使用迭代器; 3.如果你需要操作vector的第一个元素,直接取出来就行了,有必要那么纠结?
华美乐章 2013-04-11
  • 打赏
  • 举报
回复
vector a;
a[0]不就是么..费那么大得劲 你想干什么
转角天边 2013-04-11
  • 打赏
  • 举报
回复
迭代器不行吗
starytx 2013-04-11
  • 打赏
  • 举报
回复
看看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;
}
赵4老师 2013-04-11
  • 打赏
  • 举报
回复
电脑内存只是一个一维二进制字节数组及其对应的二进制地址; 人脑才将电脑内存中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……
自由建客 2013-04-11
  • 打赏
  • 举报
回复
危险动作!!
图灵狗 2013-04-11
  • 打赏
  • 举报
回复
直接取第0个元素的地址,比如&buf[0]

64,439

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧