问题标签 [subscript-operator]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
446 浏览

c++ - 在用户定义的类 C++ 中重载下标运算符

考虑以下类:

问题:有没有办法重载/覆盖/重新定义下标运算符 st 例如,可以访问三个选项中的一个选择向量。

即,假设:SocialPrefNode ordering{ }。我希望能够像中一样使用下标运算符,ordering[ i ] 并且能够在类的三个向量中选择一个,以便下标/索引 i 起作用。

示例:想要访问 a 的preferences向量中的第三个元素SocialPrefNode ordering。然后,一个人确实ordering[ 2 ]可以访问所需的元素。

0 投票
4 回答
73 浏览

c - 为什么下面代码中的 printf 语句打印的是值而不是垃圾值?

谁能解释一下 -2[array-2] 是如何工作的以及为什么在这里使用 [ ] ?这是我作业中的一个问题,它给出了输出“-10”,但我不明白为什么?

0 投票
1 回答
614 浏览

c - 指针是否支持“数组样式索引”?

(自我回答的问答——这件事不断出现)

我假设读者知道指针算法是如何工作的。

教师/C 书籍一直告诉我,我不应该*(ptr + i)像上面的例子那样使用,因为“指针支持数组样式索引”,我应该使用它ptr[i] = value;。那里没有争论 - 更容易阅读。

但是通过 C 标准,我发现没有什么叫做“数组样式索引”。事实上,运算符[]并不期望任何一个操作数是一个数组,而是一个指针或一个整数!

6.5.2.1 数组下标

约束

其中一个表达式应具有类型''指向完整对象类型的指针'',另一个表达式应具有整数类型,并且结果具有类型''<em>type''。

为什么数组下标运算符不期望数组?标准错了吗?我的老师/C 书是否混淆了?

0 投票
1 回答
311 浏览

c++ - 如何重载下标运算符以返回可以是左值的可选?

我通过实现一个八叉树类来学习一些 C++ 特性。我希望此类上的下标运算符返回与index 对应的八分圆。我应该如何在类上定义下标运算符,以便我可以(i)分配给结果和(ii)检查结果是否为空?

目标 (i) 习惯上通过使下标运算符返回一个引用来实现。但是引用不能引用任何内容,如果八分圆为空,这是一个合法的返回值。

目标 (ii) 可以通过使下标运算符返回一个可选项来实现。但是,修改指向八分圆的指针变得不简单——用std::optional<T>,T不能是引用。

这是损坏的示例(除了在实际代码中的所有实例optional都带有前缀,experimental因为我的 GCC 仅对 C++17 具有实验性支持)。

正如预期的那样,编译器以丰富多彩的方式拒绝可选引用。

我确信有一种方法可以重载赋值,这样我就可以返回一个可选的,然后像main上面那样分配给它。感谢您的任何指点!;-)

0 投票
2 回答
210 浏览

c++ - 编写下标非成员函数

我猜这在 C++ 中是不合法的,但我想我会问,给定一个我不拥有的结构:

我想为它写一个非成员下标运算符:

我收到此错误

错误:int& operator[](foo&, std::size_t)必须是非静态成员函数

0 投票
2 回答
618 浏览

c++ - 为什么我的代码无法处理大型数组输入(> 10000)?

我为 < 10000 的值尝试了相同的代码,它工作正常...我已经用 long long int 替换了所有 int 然后它还显示矢量下标超出范围错误...

样本输入:

我期待 0 但它显示“向量下标超出范围”

0 投票
3 回答
116 浏览

c++ - 由于运行时错误,无法从二维向量获取输出

我正在编写一个程序,它将接收二维向量的值并为它们提供输出。但是,我遇到了运行时错误。

0 投票
3 回答
60 浏览

c - 在 C 程序中获取指针问题

正如我们所知,数组仅在 C 中通过指针传递,那么swap1(arr[i],arr[j])下面意味着两个指针将传递给函数,swap1()那么为什么swap1(arr[i],arr[j])会给我错误?根据swap1()应该传递两个指针的函数原型,我正在传递它。

另一方面,当我实际传递地址swap1(&arr[i],&arr[j])时,它工作正常,这是显而易见的。

0 投票
2 回答
408 浏览

c++ - unique_ptr 拥有的对象的索引运算符

我正在做一个 c++ 项目。我需要放入一个 std::vector 不同的类。我发现(单个向量中的不同类的对象?)可以通过创建具有通用类型的类然后将指针指向向量来做到这一点。在这种情况下,我可以将指针转换为我需要的类型。这对我来说很清楚。

还提到,原则上不仅可以使用指针,还可以使用 smart_pointers,即std::vector<std::unique_ptr<TMyClass>>. 这就是我的问题开始的地方。TMyClass具有索引运算符 ( operator[])。

可以说我有std::vector<std::unique_ptr<TMyClass>> A。我尝试TMyClass像这样访问对象的元素,或者A[0][0]但是当我编译时出现错误:A[0].get()[0](A[0])[0]

[bcc64 错误] 类型“value_type”(又名“std::unique_ptr<.....>”)不提供下标运算符

我如何告诉编译器第二个索引与TMyClassobject 而不是与unique_ptr?如果有人向我解释如何在这种情况下访问元素,我将不胜感激。

0 投票
1 回答
90 浏览

c++ - 重载下标运算符未按预期工作

我有一个String重载下标运算符的结构。但这似乎不起作用。

Visual Studio 给我以下错误:

不存在从“String”到“char”的合适转换函数