大多数时候,我看到人们试图使用链接列表,在我看来,这似乎是一个穷人(或非常差)的选择.也许有必要探讨链表是否是数据结构的良好选择的情况.
理想情况下,答案将阐述用于选择数据结构的标准,以及哪些数据结构在特定情况下可能最有效.
编辑:我必须说,我不仅对数字,而且对答案的质量印象深刻.我只能接受一个,但如果有一些更好的东西不存在,那么还有两三个我不得不说会值得接受.只有一对(特别是我最终接受的那个)指出了链表提供了真正优势的情况.我确实认为Steve Jessop不仅要提出一个,而且要提出三个不同的答案,值得一提,我发现这些答案令人印象深刻.当然,即使它只是作为评论发布而不是答案,我认为Neil的博客条目也值得一读 - 不仅信息丰富,而且非常有趣.
我创建了许多对象然后我存储在列表中.但是我想在一段时间之后删除它们,因为我创建了一个新闻并且不希望我的记忆力变高(在我的情况下,如果我不删除它,它会跳到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.如果我不删除它们,内存使用率非常高,非常快.
我试着写一个可以用作前缀和后缀运算符的运算符
#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 ...')
Run Code Online (Sandbox Code Playgroud)void operator++(B, T...) {
谁是对的?
感谢任何帮助我了解GCC行为的人.我提交了一份新的Clang错误报告:
我尝试过使用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位.
如果项目是随机组织的,表格如何知道从哪里开始查看?
在非随机表中,项目根据某些特征进行组织.(即姓名).因此,如果表需要查找有关"John"的任意信息,它可以开始查看"J"桶.
但是,在通用哈希表中,项目是随机排列的.没有明确的特征.因此,为了找到关于"约翰"的任意信息,表格是否必须查看每个桶?
这不是浪费时间吗?这就像透过你家里的每个柜子找到一把勺子.
标准表示std::tuple具有以下成员功能
constexpr tuple();
explicit tuple(const Types&...);
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下应该发生std::tuple<>什么吗?
我试图在另一个函数的尾随返回类型中重用运算符的返回类型,但不幸的是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
给定迭代器,是否可以为此迭代器引用的集合检索/使用正确的比较函数?
例如,假设我正在编写一个通用算法:
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++ 11中利用constexpr的尾递归?
大家好我今天偶然发现了这段代码,我对于究竟发生了什么以及更具体的顺序感到困惑:
代码:
#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.任何帮助表示赞赏!