gpt4 book ai didi

c++ - 使用可变初始值初始化 C++ vector

转载 作者:太空宇宙 更新时间:2023-11-04 16:16:04 26 4
gpt4 key购买 nike

我正在编写一个 Union find 数据结构,并试图用值 parent[i]=i 初始化父 vector ,在 c++ 中有没有一种方法可以像这样初始化 vector ,即声明一个 vector 大小 N ,而不是为每个元素分配固定值,而是为每个元素分配与位置相关的值。 (不使用任何明显的 for 循环)

This is what I was looking for:
std::vector<int> parent(Initializer);

Initializer 是某个类或函数。

为了试一试我的手,我写了这个:

#include <iostream>
#include <vector>
using namespace std;

class Initializer {
private:
static int i;
public:
int operator() ()
{
return i++;
}
};

int main()
{
vector<int> parent(Initializer);
cout << parent[0];
return 0;
}

但是我认为我在这里把我的概念搞得一团糟,我不明白声明的含义,或者它在做什么。

请回答这两个问题,

(1) 如何初始化一个可变初始值的 vector 。

(2)我写的代码到底在做什么?

最佳答案

这是一个函数声明:

vector<int> parent(Initializer);

因为 Initializer 是一个类型名称,所以您声明了一个函数 parent ,它将 Initializer 作为(未命名的)参数并返回 vector<int> 。见 Most vexing parse.

做你想做的,你可以这样做:

std::vector<int> parent(N);    // where N is the size you want
std::iota(parent.begin(), parent.end(), 0); // fill it with consecutive values
// starting with 0

可以使用 std::generate 算法将函数(或函数对象)的结果保存在一个范围内:

std::generate(parent.begin(), parent.end(), Initializer());

Live demo.

关于c++ - 使用可变初始值初始化 C++ vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22471804/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com