提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:这里可以添加本文要记录的大概内容:
c++ char[]转换 string array vector 方法代码示例。
C++ 中,std::string, std::array, std::vector, 和 std::list 都是标准库中的容器类型
1,std::string
特点:
动态大小,自动内存管理,
安全性(安全地在不同线程间传递,方法多如 find, substr, compare, empty, length 等,使得字符串处理变得更加简单。),
互操作性(轻松其他 C++ 标准库组件(如 std::vector, std::map 等)一起使用),
国际化支持(默认使用 UTF-8 编码,也可以使用其他编码,如 UTF-16 或 UTF-32。)
使用场景:
执行复杂的字符串操作时,动态构建字符串时,如构建 URL、SQL 查询、XML 文档等,当安全性或内存管理是关键因素时, 在多线程环境中
2,std::array
特点:
- 固定大小:std::array 的大小是固定的,必须在编译时指定大小。
- 效率:std::array 在栈上分配内存,对于较小的元素集合来说非常高效。
- 安全性:std::array 提供了边界检查,帮助防止越界访问等问题。
使用场景:
- 当你需要一个固定大小的数组,并且不需要动态改变大小时。
- 当你关心性能和内存分配效率时,std::array 可以在栈上分配,避免堆分配带来的额外开销。
- 当安全性是关键因素时,std::array 提供了边界检查功能。
3,std::vector
特点:
- 动态大小:std::vector 的大小可以动态改变,可以根据需要增加或减少元素。
- 连续内存分配:std::vector 在内部使用连续的内存块来存储元素,这使得随机访问非常快。
- 自动内存管理:std::vector 自动管理内存分配和释放,减少了内存泄漏的风险。
- 灵活性:std::vector 提供了许多方便的方法,如 push_back, pop_back, resize, reserve, clear 等,使得数据操作变得更加简单。
使用场景:
- 当你需要一个可以动态改变大小的序列容器时。
- 当你需要随机访问容器中的元素时。
- 当你需要高效的插入和删除操作时,尤其是对于容器的尾部操作。
4,std::list
特点:
- 双向链表:std::list 使用双向链表来存储元素,这使得插入和删除操作非常快。
- 动态大小:std::list 的大小可以动态改变,可以根据需要增加或减少元素。
- 内存管理:std::list 自动管理内存分配和释放,减少了内存泄漏的风险。
- 灵活性:std::list 提供了许多方便的方法,如 push_front, push_back, pop_front, pop_back, splice 等,使得数据操作变得更加简单。
使用场景:
- 当你需要频繁地插入和删除元素时,尤其是在容器的中间位置。
- 当你不关心随机访问性能时,std::list 的随机访问相对较慢。
- 当你需要一个可逆的容器时,std::list 支持双向迭代器。
总结
- std::string 适用于需要复杂字符串处理、安全性、便利性和内存管理的应用场景。
- std::array 适合需要固定大小、高性能和安全性要求较高的场合。
- std::vector 适用于需要动态大小、快速随机访问的应用场景。
- std::list 适用于需要高效插入和删除操作的应用场景,尤其是在容器的中间位置。
提示:以下是本篇文章正文内容,下面案例可供参考
一、代码示例?
#include <iostream>
#include <vector>
#include <string>
#include <array>
#include <list>
#include <algorithm>
#include <string.h>
using namespace std;
std::string charArrayToString(const char* cstr) {
std::string result;
while (*cstr != '\0') { // 遍历C风格字符串直到遇到null终止符
result.push_back(*cstr++); // 将当前字符添加到std::string中,并移动到下一个字符
}
return result;
}
int main()
{
// char[] 转 string 1
char buf[256] = "hello world!";
string buf_s(buf);
cout << buf_s.size() << buf_s <<endl;
buf_s.clear();
cout << buf_s.size() << buf_s <<endl;
// char[] 转 string 2
buf_s = charArrayToString(buf);
cout << buf_s.size() << buf_s <<endl;
// string 转 char[] 1
string buf_s1 = "hello world!1";
char buf1[256] = {0};
strcpy(buf1, buf_s1.c_str());
cout << "buf1: " << buf1 <<endl;
// string 转 char[] 2
buf_s1 = "hello world!11";
std::copy(buf_s1.begin(), buf_s1.end(), buf1); // 复制字符,但不包括null终止符
buf1[buf_s1.size()] = '\0';
cout << "buf1: " << buf1 <<endl;
// char[] 转 array 1
char a_buf[256] = "Hello, World!";
array<char, 256> arr;
std::copy_n(a_buf, 256, arr.begin());
std::cout << "Data in std::array from char[]: ";
for (const auto& ch : arr) {
std::cout << ch;
}
std::cout << std::endl;
// array 转 char[] 1
char a_buf1[256] = {0};
array<char, 256> arr1 = {"hello world!!"};
std::copy_n(arr1.begin(), 256, a_buf1);
cout << a_buf1 << endl;
// char[] 转 vector 1
char v_buf[256] = "Hello, World!";
std::vector<char> vec;
vec.reserve(sizeof(v_buf) - 1); // 预分配内存
std::copy_n(v_buf, sizeof(v_buf) - 1, std::back_inserter(vec));
// 输出 std::vector<char> 中的数据
std::cout << "Data in std::vector<char>: ";
for (const auto& ch : vec) {
std::cout << ch;
}
std::cout << std::endl;
// vector 转 char[] 1
char v_buf_1[256] = {0};
std::copy_n(vec.begin(), vec.size(), v_buf_1);
cout << v_buf_1 << endl;
return 0;
}
总结
以上 c++ char[]转换 string array vector 方法代码示例,仅供参考。