c++ char[]转换 string array vector代码示例

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

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 方法代码示例,仅供参考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值