使用指向地图矢量的指针 (C++)
Using pointer to vector of map (C++)
我有一个类型为 vector< map < Date, Double >>
的对象(名为 simulatedPrices_
的对象)。我想做一个for
循环,读取vector
内部的map
。我尝试在下面使用:
for (j=0; j<10000; j++) {
map <Date, Double> & pricePathJ = *simulatedPrices_[j];
price = pricePathJ->find(targetDate)->second; //targetDate is certain date
cout << j << " : " << price << endl;
}
但是说没有运算符"*"
匹配这些操作数似乎是错误的。知道为什么它会抱怨这个错误吗?无论如何,我可以做得更好,而不是上述。
我使用指针的原因是simulatedPrices_
是一个相当大的对象(矢量包含 10000 张地图,每张地图有 900 个日期的价格)
谢谢。
这里没有指针,将*
应用于指针(或重载运算符以充当指针的类)以外的其他内容是没有意义的。
你想要
map <Date, Double> & pricePathJ = simulatedPrices_[j];
如果没有 *
,初始化引用以引用向量中的映射,如果这是您希望它引用的内容。然后使用 .
而不是 ->
来访问其成员。
如果出于某种原因需要指针而不是引用,请使用 *
声明指针,并使用&
获取对象的地址:
map <Date, Double> * pricePathJ = &simulatedPrices_[j];
关于引用要记住的事情:
- 它们是它们引用的对象的别名,因此可以像对待原始对象一样对待它们,因此无需使用
->
运算符来访问其成员,您只需使用.
. - 您不能将指针(也称为其他对象的地址)分配给它们。因为他们不仅持有地址。取消引用运算符不能应用于向量,但可以应用于指向向量的指针,如此处所述。
- "C++中对参考的定义是,它不需要存在。它可以实现为现有对象的新名称(类似于 Ada 中的重命名关键字)。 根据维基百科,
由于这些原因,并且由于simulatedPrices_[j]
返回一个引用(参见 std::vector::operator[]),那么您可以将其分配给另一个引用,这就是map <Date, Double> & pricePathJ = simulatedPrices_[j];
工作的原因。
没有*
没关系。
map <Date, Double> & pricePathJ = simulatedPrices_[j];
您将获得地图元素的引用。
此外,您不必担心simulatedPrices_
的"大",因为它将被引用而不是复制。
当您使用 *
时,编译器搜索了map<Date, Double>
的operator*
并抛出错误。
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 何时在引用或唯一指针上使用移动语义
- QMetaObject invokeMethod的基于函数指针的语法
- 如何从 std::atomic 中提取指针 T<T>?
- 如何在 C# 中映射双 C 结构指针?
- C++将浮点指针值舍入为小数位数
- 为什么++(*p)更改指针值
- 调整大小后指向元素值的指针unordered_map有效?
- 正在将指针转换为范围
- 使用指向成员的指针将成员函数作为参数传递
- 将OpenCV C++重写为EmguCV C#-如何使用指针
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错