我想在容器中写一个c数组,如果可能的话我更喜欢修改它。 我正在考虑使用vector但它似乎确实有一个写(* pchararray,len);功能。字符串看起来像下一个最好的东西,但它也没有写函数?
答案 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')。
答案 6 :(得分:0)
你应该更喜欢在这种情况下使用memcpy(因为向量包含POD类型)而不是使用std :: copy,它的速度要快得多。