C++:动态内存管理

很久没写

之前有个笑话,是说:几个程序员去餐厅吃饭,那个会把盘子放回原地的一定是C/C++程序员,因为他们要自己清理内存.

好了,来上题目.

编写函数,返回一个动态分配的int的vector.将此vector传递给另一个函数,这个函数读取标准输入,将读入的值保存在vector元素中.再将vector传递给另一个函数.打印读入的值.记得在恰当的时候delete vector.

小心:动态内存管理容易出错

使用new和delete管理动态内存存在三个问题:

  1. 忘记delete内存,会导致内存泄漏,而且不容易发现.
  2. 使用已经释放掉的对象.有时可以检测出这种错误.
  3. 同一块内存释放两次.

相对于发现“罪证”,制造“罪证”显然容易多了。

C++.
image-2150

源代码

C++:单词计数

问题

单词计数程序,有序和无序版本.

C++.
image-2147

有序源码

无序源码

C++:一条复杂语句

语句

C++.
image-2145

解答

  1. word_word.insert({word,0}):将数据插入到map
  2. word_word.insert({word,0}).first:取出返回的pair(示例,pair的第一个元素是一个迭代器,第二个指示是否添加成功)
  3. word_word.insert({word,0}).first->second:节引用此迭代器,也就是map中值的部分.
  4. ++word_word.insert({word,0}).first->second:循环读入输入,向map里面增加值,并对计数器进行累加.

C++:vector保存pair

问题

编写程序,读入string和int的序列,将每个string和int存入一个pair中,pair保存在一个vector中.

C++.
image-2142

源代码

2:升级版本

C++:不重复单词

问题

使用vector和set添加不重复的单词.

C++.
image-2138

源代码

1.使用vector添加不重复的单词.
使用vector添加不重复的单词,比较麻烦,推荐是使用set.

2.set添加不重复单词.

推荐使用这种方式添加,因为set内保存的本身就属于不重复的元素.