c++ - vector 名称如何被视为数组名称?

标签 c++ stdvector

首先,我是C++的新手,所以问题可能很愚蠢!
其次,我已经看到了相关的答案,可以得出结论, vector 的名称可以视为数组。

vector <int> myVector(7,10);   // creates a vector of size 7 and initializes with 10

我们可以将名称myVector用作数组,并编写为myVector [0],myVector [1] ...

但是由于vector是一个类,而myVector是它的对象,因此该对象内部应该有一个存储区域,该存储区域可以被视为类似于myVector.someArray [0],myVector.someArray [1]的数组,而不是对象名称本身如何实现?

最佳答案

非常简单的重载运算符:

operator overloading

当您在类中定义这些方法时,就可以使用那些特殊的运算符;如标准所描述的那样,那些已经可以与原始数据类型一起使用的类型。

在 vector 的情况下,你有类似

...

const Element& operator[](const unsigned int index)
{
     return internalArray[index];
}

...

在其类声明中。

您可以在std::vector类中找到类似的内容,因此,如果您愿意的话,甚至可以构建自己的 vector 类。

为了澄清起见,如果一个类定义了[]-Operator,则可以对其对象执行以下操作:
vec[4];

等效于:
vec.operator[](4);

这也意味着可以选择重载运算符的参数。您甚至可以将字符串传递给[]运算符。

例如std::map可以很好地做到这一点:

std::map -> Check out the example

关于c++ - vector 名称如何被视为数组名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61371677/

相关文章:

c++ - double 到 long 的转换不正确

c++ - 显然没有声明包含的类类型,为什么?

c++ - 我的函数应该返回一个指向 std::vector 的指针,还是一个对 std::vector 的引用?

c++ - Vector 比 size() 迭代次数更多

C++17可选树,错误: invalid use of incomplete type

C++ : initialize static member large array

c++ - 当使用模板支持仿函数作为参数时,我应该使用什么限定符?

c++ - 将 C++ 代码从 VS2003 迁移到 VS2010 后出现错误 C2678,错误 C2679 : binary '=' : no operator found which takes a right-hand operand of type 'int'

c++ - 复制在标准 vector 中只出现一次的元素的最有效方法是什么?

c++ - 如何在 C++ 中逐个元素地比较两个 vector 的相等性?