如何编写可以访问向量<Vec2s>内 Vec2s 任何元素的函数
How do I write a function that can access any element of a Vec2s inside of a vector<Vec2s>
我希望有人能告诉我如何编写一个函数,可以访问任何Vec*的任何元素,例如Vec2s*, Vec2b*,在vector_Vec2s*内。vector_Vec2s*是vector<Vec2s>.
这是我到目前为止的尝试(我仍在学习),所以如果vector_Vec2s*中的第一个Vec2s有元素[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;
:
对于原始代码,我们减少到& help;
int item( int const i, vector_Vec2s const& v )
{
return v[i];
}
希望这将帮助您完成如何编写一个可以访问任何Vec*的任何元素的函数的任务,我发现这有点太不清楚了。
- EASTL矢量<向量<int>>连续的
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- C 字符串比较“祝您好运”&gt;“再见”
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- C :对矢量进行排序&lt; struct&gt;(结构有2个整数)基于结构的整数之一
- C 操作员&gt;&gt;与突变器过载
- 明确的专业化“ CheckIntmap&lt;&gt;”实例化
- 是否需要使用 - &gt;运算符在C 中调用成员函数时
- 什么是模板&lt;&gt;inline bla bla
- 编辑C Qlist&lt; object*&gt; gt;QML代码和一些QML警告中的模型
- eigen :: llt&lt;eigen :: matrixxd&gt;具有不完整的类型
- 错误,包括&lt; ctype&gt;在原子上使用C 11
- 错误c++visual studio c2227左侧'->;Init';必须指向类/结构/联合/泛型类型
- std::vector<;uint8_t>;当C++11/14启用时,手动复制而不是调用memcpy
- ``这个''不能用this-&gt;指针变量
- 如何加入向量&lt; int&gt;到C 中的单个INT
- 是std :: set&lt; std :: future&gt;不可能存在
- 使用shared_ptr<字符串>转换为一个无序集合<字符串>
- 是numeric_limits&lt; int&gt; :: is_modulo从逻辑上矛盾
- opencv 2.4.7在iOS错误背景_segm.hpp #include&lt; list&gt;未找到