C++ | std::iota实现递增序列

C++ | std::iota实现递增序列

文章目录

  • C++ | std::iota实现递增序列
    • 传统方式实现递增
    • Apollo代码里面有一段初始化
    • std::itoa源码

传统方式实现递增

// 数组递增
int arr[1000] = {};
for (int i = 0; i < 1000; ++i)
{
	arr[i] = i;
}

// vector递增
std::vector<int> iVec;
iVec.resize(1000);
for (int i = 0; i < 1000; ++i)
{
	iVec[i] = i;
}

Apollo代码里面有一段初始化

lidar_frame_ref_->roi_indices.indices.resize(original_cloud_->size());
// we manually fill roi indices with all cloud point indices
std::iota(lidar_frame_ref_->roi_indices.indices.begin(), lidar_frame_ref_->roi_indices.indices.end(), 0);

代码功能是对lidar_frame_ref_->roi_indices这个vector进行递增初始化,从0开始,一直到original_cloud_->size()大小。

std::itoa源码

/**
*  @brief  Create a range of sequentially increasing values.
*
*  For each element in the range @p [first,last) assigns @p value and
*  increments @p value as if by @p ++value.
*
*  @param  __first  Start of range.
*  @param  __last  End of range.
*  @param  __value  Starting value.
*  @return  Nothing.
*/
template<typename _ForwardIterator, typename _Tp>
void iota(_ForwardIterator __first, _ForwardIterator __last, _Tp __value)
{
    for (; __first != __last; ++__first)
    {
        *__first = __value;
        ++__value;
    }
}

源码很清晰。

测试一下

#include 
#include 
#include 
#include 
int main()
{
    // std实现递增
	std::vector<int> iVec(10);
	std::iota(ivec.begin(), ivec.end(), 5);
	for (auto &it: ivec)
	{
		std::cout << it << " ";
	}
  // 或者使用下面语句一次性输出
  std::copy(ivec.begin(), ivec.end(), std::ostream_iterator<int>(std::cout, " "));
  // result:
  5 6 7 8 9 10 11 12 13 14
  
  // 普通数组也可以实现递增
  int arr[10];
  std::iota(arr, arr + 10, 10);		// 10 - 19
  for (int i : arr) std::cout << i << ' ';
  std::cout << '\n';
  return 0;
}


你可能感兴趣的:(C++,c++,算法,开发语言)