【发布时间】:2009-02-19 15:49:30
【问题描述】:
我想将一个 c 数组写入一个容器中,如果可能的话,我更愿意对其进行修改。 我正在考虑使用向量,但它似乎确实有一个 write(*pchararray, len);功能。 String 看起来是下一个最好的东西,但它也没有写功能?
【问题讨论】:
标签: c++ containers
我想将一个 c 数组写入一个容器中,如果可能的话,我更愿意对其进行修改。 我正在考虑使用向量,但它似乎确实有一个 write(*pchararray, len);功能。 String 看起来是下一个最好的东西,但它也没有写功能?
【问题讨论】:
标签: c++ containers
给定
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());
(所有这些都对字符串起作用)
感谢 cmets/其他答案 :)
【讨论】:
向量、字符串和许多其他容器为此目的都有一个“双迭代器”构造函数:
char raw_data[100];
std::vector<char> v(raw_data, raw_data + 100);
std::string s(raw_data, raw_data + 100);
【讨论】:
容器选择取决于您对各个元素的使用。如果你的意思是将一个 c 字符数组复制到一个容器中,这就是你可以使用的:
char buf[ n ];
std::vector<char> vc(n); // Thanks to Éric
std::copy(buf, buf + n, vc.begin());
【讨论】:
不确定你的“写”评论到底是什么意思,但是
std::vector<char> charBuffer;
在功能上等同于 c char(byte) 数组
&charBuffer[0]
为您提供连续的底层内存。
所以现在你可以做
charBuffer.resize(100);
memcpy(&charBuffer[0], src, charBuffer.size());
【讨论】:
您可以使用矢量。预先分配大小,然后寻址第一个字节:向量被保证是连续的,所以这总是有效的。
std::vector<char> vBuffer;
vBuffer.resize(nLength);
std::copy(pStart, pEnd, &vBuffer[0]);
【讨论】:
你可以使用:
string s( pchararray, len ); // constructor
或者:
string s; s.append( pchararray, len ); // append example.
如果需要,也可以使用 string::insert()。
只要您指定长度,字符串就可以愉快地处理空字符 ('\0')。
【讨论】:
在这种情况下,您应该更喜欢使用 memcpy(因为向量包含 POD 类型)而不是使用 std::copy,它会快很多。
【讨论】: