c ++数组问题

Gre*_*rey 3 c c++ visual-c++

我想初始化一个大小为200的double数组,它的值从0到199,从索引0到c ++中的199.我知道我可以通过一个简单的For循环来做到这一点,但有没有办法像这样初始化双数组?

谢谢

Ant*_*ony 10

并不是的.for循环是您的最佳选择:

double array[200];
for(int i = 0; i < 200; i++)
    array[i] = static_cast<double>(i);
Run Code Online (Sandbox Code Playgroud)

  • 我认为这是唯一的答案.即使是c ++新手也会毫不费力地理解它.其他答案(std :: generate,counting_iterator <>,无论如何)都是为了显示c ++的技巧,而不是解决实际问题.代码应尽可能简单(但不简单)=) (4认同)
  • @Sad:`counting_iterator`解决方案很简单. (4认同)
  • @Sad:这样的项目很差.标准库是该语言的一部分; 未能使用它表示程序员在C++中编程失败.在允许的情况下应该使用Boost,尽管对于某些人来说这并不总是可行的.(然后,你可以轻松地提取单个库.)缺乏对`std :: copy`的了解是不能判断C++代码,因为一个人不是C++程序员. (2认同)
  • @SadSido:我在一定程度上同意GMan.每个程序员都需要一个调试的高性能库来进行基本操作.无论那个库是什么.例如,EA Games使用EASTL,它使用专用分配器以及分配和初始化策略来实现更高的性能.但我想说并不重要:我希望任何C++程序员能够在互联网上搜索并了解当我使用STL或Boost部分时发生的事情就像在这里提到的那样简单(我不是说`boost: :mpl`). (2认同)

R S*_*hko 7

这是一种方式std::generate:

template <typename T>
class nexter
{
public:
    nexter(T start = T())
        : value_(start)
    {
    }

    T operator()()
    {
        return value_++;
    }

private:
    T value_;
};

int main()
{
    double data[200];
    std::generate(data, data + 200, nexter<double>());
}
Run Code Online (Sandbox Code Playgroud)

如果您使用的是C++ 0x,则可以跳过仿函数:

int main()
{
    double data[200];
    double next = 0.0;
    std::generate(data, data + 200, [&next]() { return next++; } );
}
Run Code Online (Sandbox Code Playgroud)

  • @GMan-谢谢.而且我不能等到lambda被认为是最前沿的,因为它们非常好用. (3认同)

Mat*_*hen 7

使用counting_iterator:

const int SIZE = 200;
double array[SIZE];
std::copy(counting_iterator<int>(0), counting_iterator<int>(SIZE), array);
Run Code Online (Sandbox Code Playgroud)