" vector"之间的差异和" Vector"对象类型

时间:2018-04-02 01:51:08

标签: c++ c++11 c++14

我正在浏览C ++书籍时使用向量。我一直在使用" Vector"用大写' v'意外地。我刚刚在书中注意到他们使用的是小写' v'。我已将一堆测试程序改为使用" vector"相反,除了我的IDE中的颜色变化,我还没有辨别出差异。作为旁注,我使用名为" std_lib_facilities.h"的自定义头文件。这是我从中获取定义的地方。

我得到的描述如下

矢量

//Disgusting macro hack to get a range checked vector:
#define vector Vector

矢量

//Trivially range-checked vector (no iterator checking)
template< class T> struct Vector : public std::vector<T>
{ Whole bunch of code }

我的第一个猜测是我正在使用的头文件碰巧创建了自己的类名为&#34; Vector&#34;类型&#34; vector&#34;,执行看起来像某种错误处理(我不知道如何理解这个头文件的大部分)。我的第二个猜测是&#34; Vector&#34;是&#34; vector&#34;的修订版本,它的可能&#34; Vector&#34;来自STL和&#34;矢量&#34;来自旧学校C.我觉得有趣的事情似乎并不重要。有什么想法吗?

P.S。标题由Bjarne Stroustrup提供,作为他的编程原则和实践第二版的一部分。

1 个答案:

答案 0 :(得分:2)

在阅读答案之前,请先考虑标题评论中给出的建议:

  

学生:请不要尝试了解标题的详细信息。       一切都将被解释。此标题主要用于您没有       一次性理解每个概念。

template< class T> struct Vector : public std::vector<T>

Vector是作者在该标题中定义的类模板。模板的实例(例如Vector<int>)将是继承自类std::vector<int>的类,其中std::vector是标准库中定义的类模板。

//Disgusting macro hack to get a range checked vector:
#define vector Vector

vector是一个预处理器宏。预处理器将用vector替换文本Vector的任何出现,这样如果你要写:

vector my_vector_object;

编译器会看到:

Vector my_vector_object;

宏也是一个恶心的黑客,正如作者所记录的那样。

  

“vector”和“Vector”之间的区别

     

我觉得有趣的是,我使用哪一个似乎并不重要。

在宏定义之后,写vectorVector之间没有区别,因为宏将替换另一个,这样编译器在任何一种情况下都会看到Vector