指向结构的指针向量
Posted
技术标签:
【中文标题】指向结构的指针向量【英文标题】:Vector of Pointers to Structure 【发布时间】:2021-11-15 13:28:46 【问题描述】:请帮助我在下面出错的地方。我想通过向量维护多个链表。 向量中的条目应该存储双向链表的第一个节点的指针。 下面是我的代码。我有两个功能首先是在给定的链表中插入一个节点。这个链表的头部将存储在向量中。
typedef long long ll;
struct block
ll tag;
bool valid_bit;
bool dirty_bit;
block* next;
block* prev;
;
vector < block* > set;
// Function to Insert new block in the set
void insert(set cashblock, ll tag1=-1,bool d=0)
temp=cashblock;
int i=0;
//check the associativity for the set
while (temp->prev!=NULL)
......more code here....
bool find(set tmp,ll tag1)
while(tmp->prev!=NULL)
...more code here...
错误如下-
43 | void insert(set cashblock,ll tag1=-1,bool d=0)
| ^~~
main.cpp:43:16: error: expected ‘)’ before ‘cashblock’
43 | void insert(set cashblock,ll tag1=-1,bool d=0)
| ~ ^~~~~~~~~~
| )
main.cpp:43:30: error: expected primary-expression before ‘tag1’
43 | void insert(set cashblock,ll tag1=-1,bool d=0)
| ^~~~
main.cpp:43:38: error: expected primary-expression before ‘bool’
43 | void insert(set cashblock,ll tag1=-1,bool d=0)
| ^~~~
main.cpp:92:16: error: ‘tmp’ was not declared in this scope; did you mean ‘tp’?
92 | bool find(set* tmp,ll tag1)
| ^~~
| tp
还有一个问题:另外,如果我需要访问向量中的第 0 个元素,它是指向链表的指针,请告诉我。它应该像 set[0]->tag 还是正确的调用方式。
【问题讨论】:
vector < block* > set;
将set
声明为变量,而不是类型别名。
"我想通过向量维护多个链表。" - 那就是std::vector<std::list<T>>
还有什么让你使用using namespace std;
和std::set
模板变得更糟。
typedef long long ll;
-- 不要从在线竞赛网站上学习坏习惯。不需要这样的宏。只需使用int64_t
。
【参考方案1】:
vector < block* > set;
这会创建一个set
变量,它的类型是vector < block* >
,但您正在尝试像使用类型一样使用set
:
如果您想为set
创建类型别名,请尝试:
using set = std::vector < block* >
但我不知道你为什么不使用标准的std::set
模板
【讨论】:
std::set
不是 OPs std::vector<block*>
的替代品,set
可能不是最好的名字【参考方案2】:
“我想通过向量维护多个链表。”
不,这不是办法。
vector < block* > set;
这是一个名为 set 的变量。
void insert(set cashblock, ll tag1=-1,bool d=0)
这是一个接受 名为 set 的类型作为参数的函数。
简单地修复你的错误:
#include <vector>
typedef long long ll;
struct block
ll tag;
bool valid_bit;
bool dirty_bit;
block* next;
block* prev;
;
using set = std::vector< block* > ; //very bad name, imagine using namespace std, the confusion...
set my_set;
// Function to Insert new block in the set
void insert(set cashblock, ll tag1=-1,bool d=0) ...
bool find(set tmp,ll tag1) ...
我需要访问向量中的第 0 个元素,它是一个指针 到一个链表。它应该像 set[0]->tag
要访问向量中的第一个元素
是指向链表的指针哪些元素是指向结构*的指针,是的,您可以设置[0]->tag
【讨论】:
以上是关于指向结构的指针向量的主要内容,如果未能解决你的问题,请参考以下文章