小编Jer*_*fin的帖子

链接列表在什么情况下有用?

大多数时候,我看到人们试图使用链接列表,在我看来,这似乎是一个穷人(或非常差)的选择.也许有必要探讨链表是否是数据结构的良好选择的情况.

理想情况下,答案将阐述用于选择数据结构的标准,以及哪些数据结构在特定情况下可能最有效.

编辑:我必须说,我不仅对数字,而且对答案的质量印象深刻.我只能接受一个,但如果有一些更好的东西不存在,那么还有两三个我不得不说会值得接受.只有一对(特别是我最终接受的那个)指出了链表提供了真正优势的情况.我确实认为Steve Jessop不仅要提出一个,而且要提出三个不同的答案,值得一提,我发现这些答案令人印象深刻.当然,即使它只是作为评论发布而不是答案,我认为Neil的博客条目也值得一读 - 不仅信息丰富,而且非常有趣.

language-agnostic linked-list data-structures

108
推荐指数
4
解决办法
2万
查看次数

删除列表中的所有对象

我创建了许多对象然后我存储在列表中.但是我想在一段时间之后删除它们,因为我创建了一个新闻并且不希望我的记忆力变高(在我的情况下,如果我不删除它,它会跳到20演出的ram).

这里有一些代码来说明我想要做的事情:

class test:
    def __init__(self):
        self.a = "Hello World"
    def kill(self):
        del self

a = test()
b = test()
c = [a,b]

print("1)Before:",a,b)

for i in c:
    del i

for i in c:
    i.kill()   

print("2)After:",a,b)
Run Code Online (Sandbox Code Playgroud)

A和B是我的对象.C是这两个对象的列表.我试图在C中使用for循环删除它:一次使用DEL和其他时间使用函数.它似乎不起作用,因为打印继续显示对象.

我需要这个,因为我多次创建了10万个对象.我第一次创建100k对象,第二次创建100k对象但是我不需要保留之前的100k.如果我不删除它们,内存使用率非常高,非常快.

python memory object del

32
推荐指数
2
解决办法
11万
查看次数

operator ++作为后缀和前缀不适用于clang

我试着写一个可以用作前缀和后缀运算符的运算符

#include <iostream>
#include <utility>

struct B { 
  // ...
};

template<typename ...T>
void operator++(B, T...) {
  std::cout << ((sizeof...(T) == 0) ? "prefix" : "postfix") << std::endl;
}

int main() {
  B b;
  b++;
  ++b;
}
Run Code Online (Sandbox Code Playgroud)

GCC编译并且可以正常工作,但是clang说

main.cpp:9:24:error:重载后增量运算符的参数必须是'int'类型(不是'T ...')

void operator++(B, T...) {
Run Code Online (Sandbox Code Playgroud)

谁是对的?


感谢任何帮助我了解GCC行为的人.我提交了一份新的Clang错误报告:

http://llvm.org/bugs/show_bug.cgi?id=14995

c++ templates operators language-lawyer c++11

28
推荐指数
1
解决办法
880
查看次数

如何在C#中向上或向下舍入?

我尝试过使用Math.Round和MidpointRounding.这似乎没有做我需要的.

例:

52.34567 rounded to 2 decimals UP   = 52.35  
 1.183   rounded to 2 decimals DOWN =  1.18
Run Code Online (Sandbox Code Playgroud)

我需要编写自定义函数吗?

编辑:

我应该更具体一点.

有时我需要像23.567这样的数字来向下舍入到23.56.在这种情况下......

Math.Round(dec, 2, MidpointRounding.AwayFromZero) gives 23.57
Math.Round(dec, 2, MidpointRounding.ToEven) gives 23.57
Run Code Online (Sandbox Code Playgroud)

可能会出现最多9位小数的小数,需要四舍五入到小数点后的1,2,3或甚至4位.

c# math

22
推荐指数
4
解决办法
5万
查看次数

在通用哈希表中查找项目?

如果项目是随机组织的,表格如何知道从哪里开始查看?

在非随机表中,项目根据某些特征进行组织.(即姓名).因此,如果表需要查找有关"John"的任意信息,它可以开始查看"J"桶.

但是,在通用哈希表中,项目是随机排列的.没有明确的特征.因此,为了找到关于"约翰"的任意信息,表格是否必须查看每个桶?

这不是浪费时间吗?这就像透过你家里的每个柜子找到一把勺子.

language-agnostic algorithm hashtable conceptual

18
推荐指数
2
解决办法
3444
查看次数

在ISO C++标准中由std :: tuple的默认构造函数描述混淆

标准表示std::tuple具有以下成员功能

constexpr tuple();
explicit tuple(const Types&...);
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下应该发生std::tuple<>什么吗?

c++ language-lawyer c++11 stdtuple

18
推荐指数
2
解决办法
2007
查看次数

为什么这个运算符在尾随返回类型中的用法不能编译?

我试图在另一个函数的尾随返回类型中重用运算符的返回类型,但不幸的是clang不接受它

struct A {
  int operator[](int);
  auto at(int i) -> decltype((*this)[i]);
};
Run Code Online (Sandbox Code Playgroud)

Clang说我班上没有算子[].Gcc确实接受了我的代码.我的代码真的无效吗?

c++ language-lawyer operator-keyword c++11 trailing-return-type

18
推荐指数
1
解决办法
462
查看次数

给定迭代器,检索容器的比较函数

给定迭代器,是否可以为此迭代器引用的集合检索/使用正确的比较函数?

例如,假设我正在编写一个通用算法:

template <class InIt, class T>
void do_something(InIt b, InIt e, T v) { 
    // ...
}
Run Code Online (Sandbox Code Playgroud)

现在,让我们说我想要做简单的东西,比如查找v[b..e).如果是b和a e的迭代器std::vector,我可以简单地使用if (*b == v) ....但是,让我们假设它是b并且e是a的迭代器std::map.在这种情况下,我应该只比较,而不是地图中包含的值的整个值类型.

所以问题是,如果这些迭代器进入地图,我该如何检索只比较键的地图的比较函数?与此同时,我不想盲目地假设我正在使用其中map任何一个.例如,如果迭代器指向a set,我想使用为其定义的比较函数set.如果他们指向vector或者deque,我可能不得不使用==,因为这些容器不会定义比较函数.

哦,差点忘了:我意识到在很多情况下,一个容器只有一个容器operator<而不是operator==它所包含的元素 - 我完全可以使用它.

c++ generics c++11

16
推荐指数
2
解决办法
438
查看次数

constexpr函数评估可以进行尾递归优化

我想知道对于长循环我们是否可以在C++ 11中利用constexpr的尾递归?

c++ language-lawyer constexpr c++11

15
推荐指数
1
解决办法
4804
查看次数

使用std :: cout评估参数的顺序

大家好我今天偶然发现了这段代码,我对于究竟发生了什么以及更具体的顺序感到困惑:

代码:

#include <iostream>

bool foo(double & m)
{
    m = 1.0;
    return true;
}

int main()
{
    double test = 0.0;
    std::cout << "Value of test is : \t" << test << "\tReturn value of function is : " << foo(test) <<  "\tValue of test : " << test << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是:

Value of test is :      1       Return value of function is : 1 Value of test : 0
Run Code Online (Sandbox Code Playgroud)

看到这一点,我会假设在调用函数之前打印出最正确的参数.那么这是对的评价吗?在调试期间,虽然似乎在输出之前调用该函数,这是我所期望的.我正在使用Win7和MSVS 2010.任何帮助表示赞赏!

c++ stdout visual-studio language-lawyer

12
推荐指数
3
解决办法
4156
查看次数