繁体   English   中英

如何编写可以访问向量内Vec2s的任何元素的函数<Vec2s>

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM