我可以使用什么容器来编写二进制文件?

时间:2009-02-19 15:49:31

标签: c++ containers

我想在容器中写一个c数组,如果可能的话我更喜欢修改它。 我正在考虑使用vector但它似乎确实有一个写(* pchararray,len);功能。字符串看起来像下一个最好的东西,但它也没有写函数?

7 个答案:

答案 0 :(得分:7)

鉴于

char myarray[10];

您可以使用 STL iterator

vector <char> v;
copy(myarray, myarray + 10, back_inserter(v));

您可以使用构造函数

vector <char> v(myarray, myarray + 10);

您可以调整大小并复制

vector<char> v(10);
copy(myarray, myarray + 10, v.begin());

(所有这些对字符串的工作方式相似)

感谢评论/其他答案:)

答案 1 :(得分:3)

Vector,string和许多其他容器都有一个“两个迭代器”构造函数用于此目的:

char raw_data[100];
std::vector<char> v(raw_data, raw_data + 100);
std::string s(raw_data, raw_data + 100);

答案 2 :(得分:2)

容器选择取决于您对各个元素的使用。如果您的意思是将c字符数组复制到conatiner,则可以使用以下内容:

char buf[ n ];
std::vector<char> vc(n); // Thanks to Éric 
std::copy(buf, buf + n, vc.begin()); 

答案 3 :(得分:1)

不确定您的“写”评论究竟是什么意思,但

std::vector<char> charBuffer;

在功能上等同于c char(byte)数组

&charBuffer[0]

为您提供连续的底层记忆。

所以现在你可以做到

charBuffer.resize(100);
memcpy(&charBuffer[0], src, charBuffer.size());

答案 4 :(得分:1)

您可以使用矢量。预先分配大小然后解决第一个字节:向量被保证为连续的,因此它始终有效。

std::vector<char> vBuffer;
vBuffer.resize(nLength);
std::copy(pStart, pEnd, &vBuffer[0]);

答案 5 :(得分:1)

您可以使用:

string s( pchararray, len );  // constructor

或者:

string s;  s.append( pchararray, len ); // append example.

如果你愿意,可以使用string :: insert()。

如果指定长度,

字符串会愉快地处理空字符('\ 0')。

请参阅http://www.cplusplus.com/reference/string/string/

答案 6 :(得分:0)

你应该更喜欢在这种情况下使用memcpy(因为向量包含POD类型)而不是使用std :: copy,它的速度要快得多。