我有大的主文件包含大约7,000行C代码.如果我想使这个代码模块化并将代码与此文件分开.将函数分离出文件的主要标准和应保留在文件中的函数是什么.
void traverse(Node* root)
{
queue<Node*> q;
Node* temp_node= root;
while(temp_node)
{
cout<<temp_node->value<<endl;
if(temp_node->left)
q.push(temp_node->left);
if(temp_node->right)
q.push(temp_node->right);
if(!q.empty())
{
temp_node = q.front();
q.pop();
}
else
temp_node = NULL;
}
}
Run Code Online (Sandbox Code Playgroud)
上面发布的代码是我的级别订单遍历代码.这段代码对我来说很好,但我不喜欢的一件事是我明确初始化temp_node = NULL或者使用break.但它对我来说似乎不是一个好的代码.
是否有比这更好的实现或如何使这个代码更好?
c++ algorithm binary-tree breadth-first-search tree-traversal
可能重复:
如何在C中设置,清除和切换单个位?
有人可以帮助我如何在第i个位置切换一下.一种方法是做((n>>i) ^ 1) << i.还有其他方法吗?
我正在阅读有关Stack Overflow的帖子,我看到了这个功能:
advance_buf( const char*& buf, const char* removed_chars, int size );
Run Code Online (Sandbox Code Playgroud)
char*& buf这里有什么意思,为什么人们会使用它?
我有一个关于内存释放和异常的问题.当我使用delete删除在堆上创建的对象时.如果在此删除之前发生异常,则内存将泄漏或此删除将执行?
这是我关于内存管理问题的上一篇文章的后续内容.以下是我所知道的问题.
1)数据竞争(原子性违规和数据损坏)
2)订购问题
3)滥用锁定导致死锁
4)heisenbugs
多线程的任何其他问题?怎么解决?
有人可以帮助我理解如何在C中实现memmove.我只有一个特殊条件吗?
if((src<dst)&&((src+sz) > dst))
copy from the back
Run Code Online (Sandbox Code Playgroud)
它还取决于堆栈增长的方式吗?
所以从我之前的memmove问题我想知道如何找到堆栈增长的方向.
void stackDirection(int* i)
{
int j;
if(&j>i)
cout<<"Stack is growing up \n"<<endl;
else
cout<<"Stack is growing down \n"<<endl;
}
int main()
{
int i=1;
stackDirtection(&i);
}
Run Code Online (Sandbox Code Playgroud) 例:
int main(void)
{
int x = 10, y;
asm ("movl %1, %%eax;"
"movl %%eax, %0;"
:"=r"(y) /* y is output operand */
:"r"(x) /* x is input operand */
:"%eax"); /* %eax is clobbered register */
}
Run Code Online (Sandbox Code Playgroud)
r(y)?%%以前用过eax?一般单%用吗?