3

我想将 ac 数组写入容器,如果可能的话,我更喜欢修改它。我正在考虑使用向量,但它似乎确实有一个 write(*pchararray, len); 功能。String 看起来是下一个最好的东西,但它也没有写功能?

4

7 回答 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')。

http://www.cplusplus.com/reference/string/string/

于 2009-02-19T17:46:58.863 回答
0

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

于 2009-02-19T17:10:44.633 回答