【LeetCode】#344 Reverse String

Write a function that takes a string as input and returns the string reversed.

Example:
Given s = “hello”, return “olleh”.

这道题要求翻转字符串输出,看到这道题我的第一思路是使用string的const_reverse_iterator。后面又看了github上的解答,比我给的答案要好很多,直接将string折半对调,简单粗暴。

  • 解法一:逆序遍历s,将s的每个元素push_back()入一个新的string revstr

  • 解法二:来自github,变量i正序遍历s的区间[0, s.size()/2),并与s[s.size()-i-1]交换

在此基础上,我修改了一下,一是将int—>string::size_type; 二是在for循环内直接调用算法std::swap():

  • 小结:size_type和int的那些事儿?
    (1)string类类型和许多其他库类型都定义了一些配套类型(companion type)。通过这些配套类型,库类型的使用就能与机器无关。size_type就是这些配套类型中的一种。size_type被定义为与unsigned型(unsigned int, unsigned long)具有相同的含义,而且可以保证足够大能够存储任意string对象的长度。为而来使用由string类型定义的size_type类型。程序员必须加上作用于操作符来说明所使用的size_type类型是由string类定义的。
    (2)使用int变量的问题是:有些机器上的int变量的表示范围太小,甚至无法存储实际并不长的string对象。如在有16位int型的机器上,int类型变量最大只能表示32767个字符的string对象。而能容纳一个文件内容的string对象轻易就能超过这个数字,因此,为了避免溢出,保存一个string对象的size的最安全的方法就是使用标准库类型string::size_type()。
    (3)size_t和size_type类似,size_t 类型定义在cstddef头文件中,该文件是C标准库的头文件stddef.h的C++版本.它是一个与机器相关的unsigned类型,其大小足以保证存储内存中对象的大小。另外sizeof操作符的返回值的类型也为size_t。
    (4)其实vector库也可以定义size_type类型,在vector库中还有一个difference_type类型,该类型用来存储任何两个迭代器对象间的距离,所以是signed类型的。

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注