C++向量如何改变内部指针

MCA*_*MCA 3 c++ pointers vector internal

我想序列化向量。我不知道如何更改向量的指针。为了简单起见,假设我有一个向量,如下所示:

vector<char> v;
Run Code Online (Sandbox Code Playgroud)

我有这个指针:

char* c = { 'v', 'e', 'c', 't', 'o', 'r' };
Run Code Online (Sandbox Code Playgroud)

我希望我的向量 v 的内部指针指向我的 char* c:

&v[0] -> c 
Run Code Online (Sandbox Code Playgroud)

如何调整指向 c 的向量?有什么办法可以做到吗?


编辑2010年10月22日

所以伙计们,在调试矢量之后我想出了这个解决方案:

vector<char> dump;
memcpy(&myVector, &dump, sizeof(myVector)); // I change contents so it can work
myVector.assign(buf, buf+5); // copy contents into it from buffer (I don't like this part)
Run Code Online (Sandbox Code Playgroud)

为了做到这一点,我需要定义

_ITERATOR_DEBUG_LEVEL=0
Run Code Online (Sandbox Code Playgroud)

因为它最初设置为 2 并且它实际上进行了调试检查(我猜)这也不是在发布模式下定义的,对吗?所以这是我现在的解决方法,我想强制 ppl 长期删除向量......那么伙计们,你们对这个解决方案有什么想法?你看到危险了吗?


我实际上需要通过 memcpy 序列化向量。我想序列化我的整个类(例如拍摄内存快照)并将其写入文件,并在重新加载时从文件中读取它并恢复对象,就像不调用其构造函数并使用 new 运算符一样。

嗯,这个向量容器发生在堆栈内存上,所以 memcpy 无法到达它,因为它唯一关心的是堆......那么这段代码现在可能对我有用:

复制(buf,buf + 5 myVvector.begin());

嗯,这也不起作用,因为我不在我的类上使用 new 关键字,据我所知,这个向量没有初始化。因此,如果我尝试使用 smt 复制、push_back_fill 这个向量,则会出现以下错误:

newDel.exe 中 0x00ec455b 处未处理的异常:0xC0000005:读取位置 0x00654b4c 时发生访问冲突。

这是有道理的......所以有人知道我如何从外部调用向量的构造函数/初始化器?

whe*_*ies 5

如果你有

vector<char> foo;

foo.push_back( 'v' );
foo.push_back( 'e' );
foo.push_back( 'c' );
foo.push_back( 't' );
foo.push_back( 'o' );
foo.push_back( 'r' );

char *c = &foo[0];
Run Code Online (Sandbox Code Playgroud)

这使得指针指向向量内容的第一项。这将一直有效,直到您尝试调整矢量大小。

编辑:

你可以这样做你想做的事:

copy( c, c+6, back_inserter( myVector ) );
Run Code Online (Sandbox Code Playgroud)

这是copy来自 的调用algorithmback_inserter来自 的函数调用iterator