第 8 章 Vector类

8.3 成员函数

成员函数(也被称作方法)是某个对象中的函数。你可以以v.f()的形式来调用对象v中的成员函数f()

Rcpp中,向量对象的成员函数列举如下。

8.3.3 offset( name ), findName( name )

按照指定字符串name的方式,返回对应元素的数值索引。

在R中,运行结果为:

8.3.4 offset( i )

函数在检查数值索引i没有超过边界后,返回该索引。

举例说明,在test.cpp文件中键入以下代码,

在R中,运行结果为:

8.3.5 fill( x )

将该向量的所有元素用标量x填充。

举例说明,在test.cpp文件中键入以下代码,

8.3.6 sort()

将该向量对象中的元素升序排列。

举例说明,在test.cpp文件中键入以下代码,

8.3.7 assign( first_it, last_it )

assign values specified by the iterator first_it and last_it to this vector object. 将迭代器first_itlates_it所指向的元素赋给向量对象。

举例说明,在test.cpp文件中键入以下代码,

beginend也是成员函数,下面8.3.12也有对应的例子

8.3.12 begin()

返回一个指向向量第一个元素的迭代器。

8.3.13 end()

返回一个指向向量最后一个元素的迭代器。 (one past the last element of this vector).

以求和函数说明begin()end()的作用。

在循环体内,我们用*it获取向量v中的元素,在指明循环范围的时候,也并不是我们熟悉的 int i = 0; i < n; i++

该例子来源于Advanced R中案例,请点击传送门

8.3.14 cbegin()

返回一个指向向量第一个元素的具有const属性的迭代器。

无法用于元素的修改

8.3.15 cend()

返回一个指向向量最后一个元素的具有const属性的迭代器。 (one past the last element of this vector).

以求和函数说明cbegin()cend()的作用。下面的例子只在声明迭代器it的时候,将iterator改为const_iterator,因为cbegin()cend()得到是const_iterator.

当然,对于c++不熟悉的用户,完全可以忽视const_iterator。不声明it,而是采用auto,如下。

上面的这段代码,在循环体中,使用auto,来自动判别it的类型。对于不熟悉C++的用户而言(也包括我),是十分便捷的。但需要注意的是,一定要加上// [[Rcpp::plugins(cpp11)]],表明你希望使用c++11的新特性,否则程序会报错。

8.3.16 insert( i, x )

在数值索引i指定的位置插入标量x。返回一个指向插入元素的迭代器。

test.cpp文件如下:

R运行结果如下:

8.3.17 insert( it, x )

在迭代器it指定的位置插入标量x。返回迭代器指向的元素。

test.cpp文件如下:

R运行结果如下:

8.3.18 erase(i)

擦除数值索引i指定的标量元素x。返回指向擦除元素之后一个元素的迭代器。

test.cpp文件如下:

R运行结果如下:

8.3.19 erase(it)

擦除迭代器it指向的元素。返回指向擦除元素之后一个元素的迭代器。

test.cpp文件如下:

R运行结果如下:

8.3.20 erase( first_i, last_i )

擦除数值索引first_ilast_i - 1之间的所有元素。返回指向擦除元素之后一个元素的迭代器。

test.cpp文件如下:

R运行结果如下:

由于擦除的是索引0和3-1,即,第1个元素至第3个元素被擦除,返回的是对应原本第四个元素的迭代器,*it为4,也印证了结果。

8.3.21 erase( first_it, last_it )

擦除迭代器first_itlast_it - 1之间的所有元素。返回指向擦除元素之后一个元素的迭代器。

test.cpp文件如下:

R运行结果如下:

8.4 静态成员函数

静态成员函数是对象所在类的函数。k可以按照 NumericVector::create() 的方式来调用该静态成员函数。

8.4.1 get_na()

返回Vector类中的NA值。

test.cpp文件如下:

R运行结果如下:

该例子有参考stackoverflow上的答案,详情点击传送门