5

如何从顺序值中快速创建向量

例如。:

vector<int> vec (4, 100);
for (vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) {
    cout << *it << endl;
}

出去:

# 100
# 100
# 100
# 100

我想

vector<int> vec (100, "0 to N");

我想知道实现这一结果的最有效方法。例如,不使用循环。

N 它是一个运行时变量。

4

6 回答 6

22

这是另一种方式...

int start = 27;
std::vector<int> v(100);
std::iota(v.begin(), v.end(), start);
于 2013-09-05T00:43:03.073 回答
16

这是一个不使用可见循环且仅使用标准 C++ 库的版本。它也很好地演示了使用 lambda 作为生成器。的使用reserve()是可选的,只是为了避免多个内存分配。

std::vector<int> v;
v.reserve(100);
int n(0);
std::generate_n(std::back_inserter(v), 100, [n]()mutable { return n++; });
于 2013-09-04T23:23:11.350 回答
2

你想要这样的东西:

std::vector<unsigned int> second(
    boost::counting_iterator<unsigned int>(0U),
    boost::counting_iterator<unsigned int>(99U));
于 2013-09-04T23:17:13.630 回答
1

使用生成算法:

#include <iostream>     // std::cout
#include <algorithm>    // std::generate
#include <vector>       // std::vector
#include <iterator>

// function generator:
struct one_more { 
  int _count;
  one_more() : _count(0) {}
  int operator()() {
      return _count++;
  }
};

int main () {
  std::vector<int> myvector (100);
  std::generate (myvector.begin(), myvector.end(), one_more());

  std::copy(myvector.begin(), myvector.end(), std::ostream_iterator<int>(std::cout, " "));
  return 0;
}
于 2013-09-04T23:22:58.130 回答
0
const int num_seconds = 100;
vector<int> second( num_seconds );
for( int n = 0 ; n < num_seconds ; ++n ) {
    second[ n ] = n;
}
于 2013-09-04T23:17:22.437 回答
0

我知道这是个老问题,但我目前正在使用来处理这个问题。它需要 c++14。

#include "htl.hpp"

htl::Token _;

std::vector<int> vec = _[0, _, 100];
// or
for (auto const e: _[0, _, 100]) { ... }
于 2016-10-24T13:02:20.290 回答