c++ - "vector"和 "Vector"对象类型之间的区别

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

我在浏览一本 C++ 书籍时正在研究 vector 。我无意中一直在使用带有大写字母“v”的“Vector”。我刚刚在书中注意到他们使用小写字母“v”。我已经将我的一堆测试程序改为使用“vector”,除了我的 IDE 中的颜色变化之外,我还没有发现任何区别。作为旁注,我使用了一个名为“std_lib_facilities.h”的自定义头文件,这是我从中获取定义的地方。

我得到的描述如下

vector

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

vector

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

我的第一个猜测是我正在使用的头文件恰好创建了自己的类,名为“Vector”,类型为“vector”,以执行某种错误处理(我不知道如何理解这个头文件的大部分)。我的第二个猜测是“Vector”是“vector”的修订版,它可能的“Vector”来自 STL,而“vector”来自旧学校 C。我觉得有趣的是,这似乎无关紧要我用的一个。有什么想法吗?

附言 header 由 Bjarne Stroustrup 提供,作为他的编程原则和实践第 2 版书的一部分。

最佳答案

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

Students: please don't try to understand the details of headers just yet. All will be explained. This header is primarily used so that you don't have to understand every concept all at once.


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

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


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

vector是预处理器宏。预处理器将替换所有出现的文本 vectorVector这样如果你要写:

vector my_vector_object;

编译器将看到:

Vector my_vector_object;

正如作者所记录的那样,宏也是一个令人作呕的 hack。


Difference between “vector” and “Vector”

The thing I find interesting is it doesn't seem to matter which one I use.

那个宏定义之后,写成vector是没有区别的或 Vector ,因为宏会将一个替换为另一个,这样编译器就会看到 Vector在任何一种情况下。

关于c++ - "vector"和 "Vector"对象类型之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49604364/

相关文章:

C++ 11 binary_search 和 lambda 函数用例

c++ - 调用 const 可变 lambda

c++ - 将 decltype 与带有尾随返回类型语法的模板化成员函数一起使用时,gcc 中的编译器错误但不是 clang

c++ - map 和 set 总是一次分配 1 个项目吗?

c++ - 停止对 operator delete 的隐式转换

php - 在 php 上运行 cpp 二进制文件可以加快我的代码?

c++ - 映射唯一值和重复值的有效方法。可以访问键或值的位置

c++ - 将本地 unique_ptr 作为 shared_ptr 返回

c++ - 按类型查找对象与字符串

c++ - 这个特定代码的时间复杂度是多少?