如何获取链表中的所有"next"节点?构建调用字符串不起作用
How to get all "next" nodes in a linked list? Building a call string does not work
,所以我有问题。我的目标是通过我创建的Sigly链接列表进行迭代。我想将std ::字符串用作参数,以if语句类似以下列出。我知道这不是一个好主意,甚至更多:我知道这可能是最糟糕的方法。我想知道是否可以完成并不重要。我尝试使用宏功能,但是我做错了,或者使用这种宏不可能。请帮帮我。我没有想法...
我在旧项目中使用的类似宏,我从cmath lib中传递了一个函数名称(用户键入诸如sin'或'tan'之类的诸如'sin'或'tan'的名称),以计算给定功能的积分,因此我认为在这种情况下它也可以工作,但显然不起作用。它说:
类型'std :: string'的条件表达是非法的
//structures.h
struct node
{
int _value;
node *pNext;
};
//functions.cpp
#define retarded_at(x) x
#define retarded_stringify(y) retarded_at(y)
//@param pHead pointer to first element of the list
void retDispIter(node *pHead)
{
std::string at{ "pHead->pNext" };
while (retarded_at(at))
{
at += "->pNext";
//here send node->_value to std::cout
}
}
在下一个元素上,循环" at"的循环" at"将是'phead-> pnext'的pnext'。列表中的8个元素的最后时间就像:
while(pHead->pNext->pNext->pNext->pNext->pNext->pNext->pNext->pNext)
返回false和" at"将包含'指针'(nullptr)到不存在的第9个元素。
您不想以您要求的方式达到什么:
- C 无法在运行时创建的"文本",所有代码都必须在编译时可用,因此可以将其编译到目标计算机 - 机器代码,
- 在运行时,机器代码未使用符号(变量,类,函数的名称)(符号转换为地址和寄存器以及地址偏移)
使此工作的最简单方法是:
//@param pHead pointer to first element of the list
void retDispIter(node *pHead)
{
node* current_node = pHead;
while (current_node)
{
//here send current_node->_value to std::cout
current_node = current_node->pNext;
}
}
另一种方法是使一个非常简单的迭代类;
struct node_iterator
{
node* current;
node_iterator operator++()
{
node* temp = current;
current = current->pNext;
return node_iterator { temp };
}
node_iterator& operator++(int)
{
current = current->pNext;
return *this;
}
node* operator->() const { return current; }
node& operator*() const { return *current; }
explicit operator bool() const { return current != nullptr; }
bool operator==(const node_iterator& other) const { return current == other.current; }
bool operator!=(const node_iterator& other) const { return !(*this == other); }
};
然后可以像这样使用:
//@param pHead pointer to first element of the list
void retDispIter(node* pHead)
{
node_iterator iter { pHead };
while (iter)
{
// usage
std::cout << iter->_value;
std::cout << (*iter)._value;
// get next
++iter;
}
}
c 不像matlab或python。它不会在运行时编译字符串或代码行。所以不,您不能以这种方式使用字符串。
通过谷歌搜索"编译器与解释器"来查看差异。C 是基于编译器的,而Python是基于解释器的。C 生成程序的用户不需要拥有所有构建工具来运行它们。
相关文章:
- 反向给定链表中的K节点
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- Boost Graph Library,修复节点大小
- C++A*算法并不总是在路径中具有目标节点
- 如何找到2个单链表的公共节点
- 计算每个节点的树高,帮助我解释这个代码解决方案
- 对于set上的循环-获取next元素迭代器
- 为什么我的删除节点函数实际上没有删除节点?
- 我们可以删除链表中静态内存中的节点吗
- 如何在pugixml中获取节点的内部XML
- 为什么我们要为avl树实现返回一个指向节点的指针,而不是void函数
- C++RapidXml-使用first_node()遍历以修改XML文件中节点的值
- 为什么C++对链表中的下一个节点使用指针,而像 C# 或 Java 这样的语言只使用类 Node 的名称?
- C++17 - 使用自定义分配器的节点提取/重新插入 - 适用于 clang++/libc++,但不适用于 libstd
- 节点 *temp; 和节点 *tmp = 新节点之间的差异
- 引擎节点:未定义的符号:_ZTV6Config
- 为什么"delete"关键字不删除节点?
- 如何获取链表中的所有"next"节点?构建调用字符串不起作用
- 链接列表中的节点、&node 和 node->next 之间的区别
- 在第三次调用中,当地址因本地作用域而被销毁时,temp2->next 如何能够访问第二个节点的地址?