我想将 ac 数组写入容器,如果可能的话,我更喜欢修改它。我正在考虑使用向量,但它似乎确实有一个 write(*pchararray, len); 功能。String 看起来是下一个最好的东西,但它也没有写功能?
user34537
问问题
810 次
7 回答
7
给定
char myarray[10];
您可以使用STLiterator
:
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());
(并且所有这些对于字符串的工作方式都类似)
感谢评论/其他答案:)
于 2009-02-19T15:55:44.280 回答
3
向量、字符串和许多其他容器为此目的都有一个“两个迭代器”构造函数:
char raw_data[100];
std::vector<char> v(raw_data, raw_data + 100);
std::string s(raw_data, raw_data + 100);
于 2009-02-19T16:06:02.657 回答
2
容器选择取决于您对各个元素的使用。如果您的意思是将 ac 字符数组复制到容器中,您可以使用以下方法:
char buf[ n ];
std::vector<char> vc(n); // Thanks to Éric
std::copy(buf, buf + n, vc.begin());
于 2009-02-19T15:56:17.403 回答
1
不确定您的“写”评论到底是什么意思,但是
std::vector<char> charBuffer;
在功能上等同于 ac char(byte) 数组
&charBuffer[0]
为您提供连续的底层内存。
所以现在你可以做
charBuffer.resize(100);
memcpy(&charBuffer[0], src, charBuffer.size());
于 2009-02-19T15:52:37.437 回答
1
您可以使用向量。预先分配大小,然后寻址第一个字节:向量被保证是连续的,所以这总是有效的。
std::vector<char> vBuffer;
vBuffer.resize(nLength);
std::copy(pStart, pEnd, &vBuffer[0]);
于 2009-02-19T15:53:38.740 回答
1
您可以使用:
string s( pchararray, len ); // constructor
或者:
string s; s.append( pchararray, len ); // append example.
或 string::insert() 如果你愿意。
如果您指定长度,字符串可以愉快地处理空字符 ('\0')。
于 2009-02-19T17:46:58.863 回答
0
在这种情况下,您应该更喜欢使用 memcpy(因为向量包含 POD 类型)而不是使用 std::copy,它的速度要快得多。
于 2009-02-19T17:10:44.633 回答