我正在编写一个 Union find 数据结构,并试图用值 parent[i]=i 初始化父向量,在 C++ 中有没有办法像这样初始化向量,即声明一个大小为 N 的向量,并且不为每个元素分配固定值,而是为每个元素分配位置相关值。(不使用任何明显的 for 循环)
This is what I was looking for:
std::vector<int> parent(Initializer);
Run Code Online (Sandbox Code Playgroud)
其中 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;
}
Run Code Online (Sandbox Code Playgroud)
然而,我认为我在这里把我的概念搞得一团糟,我不明白声明的意思,或者它在做什么。
请回答这两个问题,
(1) 如何用可变初始值初始化向量。
(2)我写的代码到底是做什么的?
这是一个函数声明:
vector<int> parent(Initializer);
Run Code Online (Sandbox Code Playgroud)
因为Initializer
是一个类型名称,所以你声明了一个函数parent
,它接受Initializer
一个(未命名的)参数并返回vector<int>
. 请参阅最烦人的解析。
要做你想做的事,你可以这样做:
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
Run Code Online (Sandbox Code Playgroud)
有std::generate
算法,您可以使用保存在一个范围内的函数(或函数对象)的结果:
std::generate(parent.begin(), parent.end(), Initializer());
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
675 次 |
最近记录: |