2.1 - 反转字符串中的单词 && 每个进程的内存里包含什么

目录

1.反转字符串中的单词

a.核心思想

b.思路

c.步骤

2.每个进程的内存里包含什么


1.反转字符串中的单词

151. 反转字符串中的单词 - 力扣(LeetCode)https://leetcode.cn/problems/reverse-words-in-a-string/

cpp 复制代码
class Solution {
public:
    string reverseWords(string s) {
        vector<string> words;
        stringstream ss(s);
        string word;

        while (ss >> word) 
        {
            words.push_back(word);
        }

        reverse(words.begin(), words.end());
        string result;

        for (size_t i = 0; i < words.size(); ++i)
        {
            result += words[i];
            if (i < words.size() - 1) 
                result += " ";
        }
        return result;
    }
};

a.核心思想

先将字符串按单词分割成多个子串,然后将这些子串逆序,最后将逆序后的子串用单个空格连接起来。

b.思路

① 使用字符串流或者手动遍历字符串的方式提取出每个单词。

② 将提取出的单词存储在一个容器(如 vector)中。

③ 逆序该容器中的单词。

④ 使用空格将逆序后的单词连接成一个新的字符串。

c.步骤

① 初始化一个空的 vector 用于存储单词。

② 遍历字符串,跳过前导空格,找到单词的起始位置。

③ 逐个读取字符,直到遇到空格,将读取到的单词存入 vector

④ 继续跳过空格,重复步骤 3 直到字符串结束。

⑤ 逆序 vector 中的单词。

⑥ 使用空格将逆序后的单词连接成字符串并返回。

2.每个进程的内存里包含什么

每个进程的内存(即进程的地址空间)通常包含多个不同的区域(或称为段),每个区域存储特定类型的数据或代码。以下是进程内存的主要组成部分及其概括:

  1. 代码段(Text Segment):

    1. 存储程序的可执行指令(即机器代码)。

    2. 通常是只读的,以防止程序意外修改自己的指令。

    3. 在进程的整个生命周期内保持不变。

  2. 数据段(Data Segment):

    1. 存储全局变量和静态变量。

    2. 可以进一步分为初始化数据段(.data)和未初始化数据段(.bss)。

    3. 初始化数据段包含在程序编译时已初始化的全局和静态变量。

    4. 未初始化数据段包含在程序编译时未初始化的全局和静态变量,通常在程序启动时被初始化为零。

  3. 堆( Heap ):

    1. 动态分配的内存区域,用于存储在程序运行时动态分配的数据。

    2. 程序员通过调用如 malloc(在C中)或 new(在C++中)等函数来从堆中分配内存。

    3. 堆的大小在进程的生命周期内可以动态增长或缩小。

  4. 栈(Stack):

    1. 用于存储函数的局部变量、函数参数、返回地址以及调用链信息。

    2. 栈是一个后进先出(LIFO)的数据结构。

    3. 每当函数被调用时,一个新的栈帧(stack frame)被压入栈顶,包含该函数的局部变量和参数。

    4. 当函数返回时,其栈帧被弹出栈顶。

  5. 共享库 内存映射 (Memory Mapping Segment):

    1. 存储共享库(如动态链接库或共享对象)的代码和数据。

    2. 允许多个进程共享同一份库代码,节省内存。

  6. 内核结构(Kernel Data Structures,不在用户空间中):

    1. 虽然严格来说不属于进程的用户空间内存,但进程在内核空间中也有相关的数据结构,如进程描述符(process descriptor)、页表(page tables)等。

    2. 这些数据结构由操作系统内核管理,用于控制进程的执行和访问资源。

概括来说,进程的内存包含代码、数据、动态分配的内存(堆)、函数调用信息(栈)、共享库以及相关的内核数据结构。这些区域共同支持进程的执行和资源管理。

希望这些内容对大家有所帮助!

感谢大家的三连支持!

相关推荐
Once_day9 小时前
C++之《程序员自我修养》读书总结(4)
c语言·c++·编译和链接
近津薪荼10 小时前
dfs专题10——全排列 II
算法·深度优先
Hcoco_me10 小时前
车载摄像头核心知识点结构化总结
人工智能·深度学习·数码相机·算法·机器学习·自动驾驶
紫陌涵光10 小时前
108.将有序数组转换为二叉搜索树
数据结构·算法·leetcode
iAkuya10 小时前
(leetcode)力扣100 75前K个高频元素(堆)
java·算法·leetcode
tod11310 小时前
C++核心知识点全解析(二)
开发语言·c++·面试经验
载数而行52011 小时前
算法系列2之最短路径
c语言·数据结构·c++·算法·贪心算法
消失的旧时光-194311 小时前
C++ 多线程与并发系统取向(五)—— std::atomic:原子操作与状态一致性(类比 Java Atomic)
开发语言·jvm·c++·并发
低频电磁之道11 小时前
C++中预定义宏
开发语言·c++
fpcc11 小时前
并行编程实战——CUDA编程的Warp Vote
c++·cuda