gpt4 book ai didi

c++ - 如何定义可用于存储指向 int 的指针和指向 int 容器的迭代器的变量?

转载 作者:行者123 更新时间:2023-11-28 00:34:57 25 4
gpt4 key购买 nike

以下类型 T 的合适类型是什么?我不想使用 auto,因为我想创建一个带有 T 类型成员变量的类。谢谢。

int* ptr;
vector<int> vec;

T var = ptr;
T var2 = vec.begin();
T var3 = vec.end();

var++; var2++; // T should be so that these are legal
T newvar = var2 + 5; // Allow random access etc.

根据评论,这就是我想要做的。我想创建一个类来表示邻接表形式的图,但抽象出低级别的底层实现细节。

// First implementation
vector<vector<int> > adj1; // adj1[i] gives vector of neighbors of i-th vertex
vector<int> nbrs_of_vertex_0 = {1,2};
vector<int> nbrs_of_vertex_1 = {2,0};
vector<int> nbrs_of_vertex_2 = {0,1};
adj1.push_back(nbrs_of_vertex_0);
adj1.push_back(nbrs_of_vertex_1);
adj1.push_back(nbrs_of_vertex_2);
int degree[3] = {2, 2, 2};

// Second implementation
int all_lists[6] = {1,2, 2,0, 0, 1};
int * adj2[3] = {all_lists, all_lists+2, all_lists+4};


// Common algorithm using both implementation
IteratorType it1 = adj[0].begin();
for(int i = 0; i < degree[0]; i++)
cout << *it1++;
IteratorType it2 = adj2[0];
for(int i = 0; i < degree[0]; i++)
cout << *it2++;

问题是:上面代码中的IteratorType应该是什么类型?

最佳答案

从 c++11 开始你可以使用 beginend免费功能。它们都适用于标准容器和“c 数组”。由于我们在 c++11 中也有 auto,您可以按如下方式重写代码:

// Common algorithm using both implementation
auto it1 = std::begin(adj[0]);
for(int i = 0; i < degree[0]; i++)
cout << *it1++;
auto it2 = std::begin(adj2[0]);
for(int i = 0; i < degree[0]; i++)
cout << *it2++;

关于c++ - 如何定义可用于存储指向 int 的指针和指向 int 容器的迭代器的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21299748/

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