向向量添加 insert_at() 函数

问题描述 投票:0回答:1

我正在更新一些(很多)旧的 MFC 代码,以用向量替换 CArray。

有一个函数很麻烦,那就是插入函数。现有代码通过数组索引使用 InsertAt() 的地方,现在需要使用向量迭代器,这让我烦恼不已!

刚来的时候看起来没那么糟糕

array.insert(array.begin() + index, 10)

但是当真正的代码执行时...

class_instance->element_left->local_coordinate_point_array.insert(class_instance->element_left->local_coordinate_point_array.begin() + index, Point2(10,15));

您必须将所有内容输入两次,这很快就会变得烦人,这使得代码的可读性大大降低,并且如果您进行任何更改,则必须确保同时更改两者,否则您会遇到意想不到的错误......并且在大多数情况下,偏移量为零。 (我知道在数组开头插入效率不高,但插入仅在非性能关键时刻完成,并且时间关键处理是迭代数组、复制、二进制搜索等)

我可以创建一个模板函数,甚至是一个允许的宏

'InsertAt(数组,索引,10);'

但这违背了 C++ 语法,最好保持面向对象。 那么,有没有一个好的方法可以将 insert_at 函数添加到向量模板中,这样我就可以做到

array.insert_at(index, 10)

c++ templates
1个回答
0
投票

您无法向

std::vector
添加成员函数。

您可以编写免费的函数模板:

template<typename V,typename E> 
void InsertAt(V& vect,const E& elem,size_t index) {
      vect.insert(vect.begin()+index,elem);
}

但这违背了 C++ 语法

不。

InsertAt(vec,42,42);
是完美的 C++ 语法。

保持面向对象会更好

自由函数被视为类接口的一部分。编写这个自由函数并没有什么反 OO 的意思。相反,添加任何函数作为成员都不是干净的面向对象设计。

© www.soinside.com 2019 - 2024. All rights reserved.