C++ 写入C+中向量中的特定位置+;

C++ 写入C+中向量中的特定位置+;,c++,pointers,vector,C++,Pointers,Vector,我有一个库函数,它从套接字读取内容并将内容写入向量: writeIntoVector( vector<char>& aVector, int nr_of_bytes ); writeIntoVector(vector&aVector,整数个字节); 我正在从套接字读取数据块,并希望将从套接字读取的内容直接放入向量中。这样,第一个writeIntoVector将数据从位置0写入向量,下一次调用writeIntoVector将数据从套接字写入位置nr_处的向量,位置nr_为

我有一个库函数,它从套接字读取内容并将内容写入向量:

writeIntoVector( vector<char>& aVector, int nr_of_bytes  );
writeIntoVector(vector&aVector,整数个字节);
我正在从套接字读取数据块,并希望将从套接字读取的内容直接放入向量中。这样,第一个writeIntoVector将数据从位置0写入向量,下一次调用writeIntoVector将数据从套接字写入位置nr_处的向量,位置nr_为字节/2(对于char),依此类推。
我怀疑这可以通过指针实现,但我不确定如何实现。

假设
writeIntoVector()
是您自己的函数,您可以使用索引尝试类似的操作:

size_t writeIntoVector(const size_t startPos, std::vector<char> & out)
{
  // write from startPos to at most out.size() - 1
  // return number of written elements
}
size\u t writeIntoVector(const size\u t startPos,std::vector&out)
{
//从startPos写入到最多输出.size()-1
//返回写入元素的数目
}
基于迭代器的方法可能如下所示:

typedef std::vector<int>::iterator Iter;

Iter writeIntoRange(Iter begin, Iter end)
{
  // write from begin to at most end - 1
  // return last iterator, that was actually modified
}
typedef std::vector::iterator Iter;
Iter写入范围(Iter开始,Iter结束)
{
//从开始到最多结束写入-1
//返回实际修改的最后一个迭代器
}

你的意思是说
writeIntoVector()
是你必须使用且不能更改的东西吗?还是在您的控制之下?这个库函数是如何声明的?我认为不太可能是
writeIntoVector(vector aVector,int nr_字节)。它可能应该是
writeIntoVector(vector&aVector,int nr_字节)(通过引用传递向量)“等”是什么意思?下一个位置是“
nr\u/u字节”
还是“(3*nr\u/u字节)/2”之后的位置?为什么每隔半个参数写一次?你能举个例子吗?迭代器方法加1(ffs)。这就是它应该如何工作在C++中。我现在不能收回我的投票,但是迭代器方法看起来有问题,你需要首先调整向量,或者使用<代码> BuffySuxtTyItReals<代码>,这样看起来像编写错误一样容易出错。将
writeIntoRange
作为一个函数似乎没有简单的
memcpy
进入向量数据的优势(从套接字读取不太可能一次只读取一个字节)。@JonathanWakely这个问题太广泛了,无法提供一个适用于任何情况的安全解决方案。我相信,从套接字读取数据并将其写入固定大小的缓冲区并不少见。根据从套接字读取的内容自动增加容器大小也可能会有问题,因为可能会耗尽内存。同意,我只是不确定
writeToRange
是否确实有助于解决问题的任何部分。如果您喜欢像API这样的范围,为什么要将其限制为仅使用
vector::iterator
,而
char*
将更灵活并支持其他类型的固定长度缓冲区?(从带有
vector::data()
的向量中获取)。如果
writeToRange
从套接字读取128个字节,并且
distance(begin,end)==100
它如何处理额外的字节?在大多数情况下,最好尝试调整向量的大小,如果不能,则抛出
bad_alloc
,而不是返回
end
,但没有显示丢失了28个字节。我理解您的反对意见,但我也怀疑OP能否充分利用所有这些细节的答案。我的意思是粗略而快速地展示可以应用的概念。我并不是想在解决方案上投入太多精力,也许对OP的情况有用。这个问题太宽泛了。