目录
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.每个进程的内存里包含什么
每个进程的内存(即进程的地址空间)通常包含多个不同的区域(或称为段),每个区域存储特定类型的数据或代码。以下是进程内存的主要组成部分及其概括:
代码段(Text Segment):
存储程序的可执行指令(即机器代码)。
通常是只读的,以防止程序意外修改自己的指令。
在进程的整个生命周期内保持不变。
数据段(Data Segment):
存储全局变量和静态变量。
可以进一步分为初始化数据段(.data)和未初始化数据段(.bss)。
初始化数据段包含在程序编译时已初始化的全局和静态变量。
未初始化数据段包含在程序编译时未初始化的全局和静态变量,通常在程序启动时被初始化为零。
堆( Heap ):
动态分配的内存区域,用于存储在程序运行时动态分配的数据。
程序员通过调用如
malloc(在C中)或new(在C++中)等函数来从堆中分配内存。堆的大小在进程的生命周期内可以动态增长或缩小。
栈(Stack):
用于存储函数的局部变量、函数参数、返回地址以及调用链信息。
栈是一个后进先出(LIFO)的数据结构。
每当函数被调用时,一个新的栈帧(stack frame)被压入栈顶,包含该函数的局部变量和参数。
当函数返回时,其栈帧被弹出栈顶。
共享库 的 内存映射 (Memory Mapping Segment):
存储共享库(如动态链接库或共享对象)的代码和数据。
允许多个进程共享同一份库代码,节省内存。
内核结构(Kernel Data Structures,不在用户空间中):
虽然严格来说不属于进程的用户空间内存,但进程在内核空间中也有相关的数据结构,如进程描述符(process descriptor)、页表(page tables)等。
这些数据结构由操作系统内核管理,用于控制进程的执行和访问资源。
概括来说,进程的内存包含代码、数据、动态分配的内存(堆)、函数调用信息(栈)、共享库以及相关的内核数据结构。这些区域共同支持进程的执行和资源管理。
希望这些内容对大家有所帮助!
感谢大家的三连支持!