[英]How do I write a function that can access any element of a Vec2s inside of a vector<Vec2s>
我希望有人能向我展示如何编写一个函数,该函数可以在vector_Vec2s *内部访问任何Vec *的任何元素,例如Vec2s *,Vec2b *。 vector_Vec2s *是vector<Vec2s>.
的typedef vector<Vec2s>.
到目前为止,这是我的尝试(我仍在学习中),因此,如果vector_Vec2s *中的第一个Vec2具有元素[1,2],我希望能够返回1或2
short std_vector_get_element( vector_Vec2s* v, int i ) {
vector_Vec2s v = *v;
int a = v[i];
return a;
}
如果vector_Vec2s
是向量的向量,则应在函数(或宏)中说出要获取哪个向量的元素的索引。 如我所见,该函数应如下所示:
short std_vector_get_element( vector_Vec2s * v
, unsigned int vectorIdx
, unsigned int elementIdx ) {
return (*v)[ vectorIdx ][ elementIdx ];
}
或宏
#define std_vector_get_element( v, vectorIdx, elementIdx ) \
(*v)[ vectorIdx ][ elementIdx ]
或更像这样
template< class T >
T std_vector_get_element( const std::vector< std::vector< T > > & v
, unsigned int vectorIdx
, unsigned int elementIdx ) {
return v[ vectorIdx ][ elementIdx ];
}
但是在这种情况下,我看不出有任何理由拥有此功能,而不仅仅是编写以下代码:
short elem = v[ vectorIdx ][ elementIdx ]; // I think this is better then the next
//short elem = std_vector_get_element( v, vectorIdx, elementIdx );
让我们检查一下您的代码:
short std_vector_get_element( vector_Vec2s* v, int i ) {
vector_Vec2s v = *v;
int a = v[i];
return a;
}
结果类型short
:
如果没有很好的理由使用其他任何内容,只需使用int
即可。 请记住,过早的优化是万恶之源。
名称std_vector_get_element
具有类型指示:
在C ++中,函数可以并且经常在参数类型上重载。 大多数情况下,无需在名称中指出参数类型。 另一方面,指示结果类型通常是个好主意。 还要注意, operator()
是成员函数的有效名称,并且支持索引的自然表示法。 一个约定的字母名称,通过建立std::vector
,是调用它at
,而item
是个不错的名字无论是。
参数类型vector_Vec2s *
:
首先,形式参数应为const
,以便该函数可用于const
实际参数。 其次,参数类型应该是引用,而不是指针,例如,以便能够直接将函数结果作为实际参数传递,并避免与指针是否为0相关的不确定性。 因此,请使用参数类型vector_Vec2s const&
。
索引的参数类型为int
:
通常可以,但是如果要在64位平台上支持> 4G项,则不能。 在这种情况下,请使用<stddef.h>
ptrdiff_t
,这也是一个有符号的类型(这是指针差异的类型)。
复制vector_Vec2s v = *v;
:
这种复制是不必要的,只是效率低下。
然后,对于原始代码,我们要...
int item( int const i, vector_Vec2s const& v )
{
return v[i];
}
希望这将帮助您完成“如何编写可以访问任何Vec *的任何元素的函数”的任务,我对此不太清楚,无法解决。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.