着急求教:vector中内存分配是连续的还是不连续的

zxyjoy 2003-12-25 03:07:36
在使用C++标准库vector时,能不能使用memcpy拷贝到另一个地方,也就是说vector的内存是连续的吗?
...全文
2113 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
huyunkun 2004-01-02
  • 打赏
  • 举报
回复
请问楼上:
vector<vector<vector<int> > > vecInt(m, vector<vector<int> >(n, vector<int>(l)));
可否解释一下?
flyintoy 2003-12-31
  • 打赏
  • 举报
回复
我认为vector是连续的吧!要考到别去的话,可要考虑到vector<T> :: iterator哦!
wingfiring 2003-12-31
  • 打赏
  • 举报
回复
jinkaoyan(jinkaoyan)
Scott Mayers 说:vector 在内存的布局是chunc状的。(effective STL item 1)
啊?我怎么觉得这个应该是说deque。
vector即使物理上是chunk状的,那也应该是被OS屏蔽了吧?
hifrog 2003-12-31
  • 打赏
  • 举报
回复
如果是多维向量的话,在同一维中的元素在内存中的空间是连续的。不妨看:

#include <iostream>
#include <vector>
#include <iomanip>
using namespace std;
int main()
{
int i,
j,
k,
m, //一维坐标
n, //二维坐标
l; //三维坐标


cout << "input value for m,n,l:";
cin>>m>>n>>l;
vector<vector<vector<int> > > vecInt(m, vector<vector<int> >(n, vector<int>(l)));
for (i = 0; i < m; i++)
for (j = 0; j < n; j++)
for(k = 0; k < l; k++)
vecInt[i][j][k] = i+j+k;

for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
for(k = 0; k<l; k++)
cout<<setw(5)<<vecInt[i][j][k]<<":"<<setw(9)<<&vecInt[i][j][k];
cout<<endl;
}
cout<<endl;
}

return 0;
}

运行结果:
input value for m,n,l:2 3 4
0: 00492FE0 1: 00492FE4 2: 00492FE8 3: 00492FEC
1: 00492FA0 2: 00492FA4 3: 00492FA8 4: 00492FAC
2: 00492F60 3: 00492F64 4: 00492F68 5: 00492F6C

1: 00492EC0 2: 00492EC4 3: 00492EC8 4: 00492ECC
2: 00492E80 3: 00492E84 4: 00492E88 5: 00492E8C
3: 00492E40 4: 00492E44 5: 00492E48 6: 00492E4C

Press any key to continue

xiaocai365 2003-12-29
  • 打赏
  • 举报
回复
用石块和木头棍子修一下电脑。
jinkaoyan 2003-12-29
  • 打赏
  • 举报
回复
Scott Mayers 说:vector 在内存的布局是chunc状的。(effective STL item 1)
idwang 2003-12-29
  • 打赏
  • 举报
回复
在c++ 标准程序库一书中已经说道,Vector和动态数组一样,可以用来存放常规C字符串,可以通过取地址来访问。地址是连续的。
xkak2 2003-12-25
  • 打赏
  • 举报
回复
当然是连续的,vector甚至可以代替string,当然,最后没有'\0'
xiaoyunet 2003-12-25
  • 打赏
  • 举报
回复
即使是连续的,也不一定代表你可以用memcpy来拷贝,请考虑std::copy算法。
arya 2003-12-25
  • 打赏
  • 举报
回复
不是“将要”,是“已经”。只不过这个标准不是1998年那个,而是2002年所做的修订版。
pi1ot 2003-12-25
  • 打赏
  • 举报
回复
记得在那里看到过说是“将要”进入标准,不过我觉得将要进入标准的东西和将要移出标准的东西是一样的,都可以放心用,呵呵。
arya 2003-12-25
  • 打赏
  • 举报
回复
对。这已经进入了C++标准。
chenmujian81 2003-12-25
  • 打赏
  • 举报
回复
vector的内存一定是连续的

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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