STL过载矢量分配
STL overload vector assignment
我正在开发一个重载索引运算符([])的类。为了允许元素的赋值,运算符必须返回对元素的引用。例如:
class myclass: public vector<int>
{
...
public:
int & myclass::operator [] (int i)
{
return vector<int>::operator[](i);
}
...
在这种情况下,客户端代码可以使用返回的引用为元素赋值。然而,我希望有一种方法来截取元素的实际赋值,这样我就可以使用赋值来进行一些内部内务处理。有没有一种相对干净简单的方法可以做到这一点,或者我应该只创建一些访问器函数,而不是使用运算符重载?
AFAIK std::vector索引运算符已经返回对项的引用(const或nonconst),因此不需要继承和重写。
如果要截取值的赋值,正确的方法是定义/覆盖值本身的赋值运算符(不能在矢量索引运算符中执行)。这当然不适用于纯int,因此您需要将int封装在一个类中,该类将提供赋值运算符,在那里您可以执行"任何您想要的操作"。
编辑:
好的,我明白了,所以可能需要做一些覆盖。对于反向查找,其中一种可能性可能是不将值存储在反向结构中,而是将其指针(指向原始位置)。原始结构中的值分配将通过指针重定向来反映。这还需要向反向查找映射传递一个自定义比较运算符,以便不比较指针,而是比较值。
一般来说,还应该检查boost::multi_index,它可以做到这一点——创建具有多个查找索引的单个结构。
没有办法拦截整数的赋值。但是,您可以返回对自定义类型的引用,该自定义类型的赋值运算符已重载。自定义类型可以转换为int,这样它就可以作为一个类型使用。
当然,这意味着您不能继承返回对int
的引用的std::vector<int>
。无论如何都应该避免公开继承std::vector
。您类的用户可能会意外地通过std::vector<int>*
删除对象,这将具有未定义的行为。
- STL算法和back_inserter可以预分配空间吗?
- 是否有具有外部元素分配的序列容器(在 STL 中)?
- 具有 STL 类 c++ 的结构的内存分配
- c++11:在VS2015中分配全局STL "map<string, string>" initializer_list崩溃
- 为什么STL优先级队列错误地分配了我的类对象
- 如果容器不重新分配,STL 的priority_queue会重新分配吗?
- c ++ stl 库容器具有动态内存分配
- 如何使用boost ::与扩展STL容器的自定义容器分配
- 使用队列和列表 STL 进行C++分配。在将数据填充到列表或队列中然后打印该数据时遇到问题
- STL和元素插入中列表的动态分配
- 如何根据STL列表中的元素数量分配内存
- 没有stl和动态内存分配的成员函数类
- 将一个STL向量有效地分配给另一个STL矢量(WSL问题)
- 将STL Deque重新分配我的元素(C )
- 在插入C STL地图之前,我需要使用新的内存分配内存
- C++ stl unordered_map,线程安全,其中每个线程仅访问其自己分配的键,并且可以编辑该值
- STL C++中的内存分配
- 分配 STL 容器是否安全
- 解除分配 stl 占用的空间
- 复制/分配STL模板,std::less和std:greater