Tag: C#的

std :: vector :: resize()与std :: vector :: reserve()

在这篇文章的评论部分有一个关于使用std::vector::reserve()和std::vector::resize()的线程。 这是原始代码: void MyClass::my_method() { my_member.reserve(n_dim); for(int k = 0 ; k < n_dim ; k++ ) my_member[k] = k ; } 我相信要写vector元素,正确的做法是调用std::vector::resize() ,而不是std::vector::reserve() 。 事实上,以下testing代码在VS2010 SP1的debugging版本中“崩溃”: #include <vector> using namespace std; int main() { vector<int> v; v.reserve(10); v[5] = 2; return 0; } 我是对的,还是我错了? 和VS2010 SP1是对的,还是错了?

如何closureslogin表单并在不closures应用程序的情况下显示主窗体?

我在我的项目(login和主)有两种forms。 我想要的是,如果login成功,我必须显示主窗体并closureslogin窗体。 我在login表单中有这种方法,当login成功时closureslogin表单。 但主窗体不显示。 public void ShowMain() { if(auth()) // a method that returns true when the user exists. { var main = new Main(); main.Show(); this.Close(); } else { MessageBox.Show("Invalid login details."); } } 如果login过程成功,我试图隐藏login表单。 但它困扰我,因为我知道,而我的程序运行login表单还在那里,应该closures吧? 什么应该是正确的方法呢? 谢谢…

捕获的C ++ lambda作为函数指针

我正在玩C ++ lambda和他们隐式转换为函数指针。 我的起始示例是使用它们作为ftw函数的callback函数。 这按预期工作。 #include <ftw.h> #include <iostream> using namespace std; int main() { auto callback = [](const char *fpath, const struct stat *sb, int typeflag) -> int { cout << fpath << endl; return 0; }; int ret = ftw("/etc", callback, 1); return ret; } 修改后使用捕获: int main() { vector<string> entries; auto callback […]

C ++中的常量和编译器优化

我已经阅读了C ++中关于const正确性的所有build议,并且这很重要(部分),因为它有助于编译器优化代码。 我从来没有见过的是对编译器如何使用这些信息来优化代码的一个很好的解释,甚至好的书也不去解释幕后发生的事情。 例如,编译器如何优化一个声明为const的方法,而不是一个应该是的方法。 当你引入可变variables时会发生什么? 他们影响const方法的优化吗?

通过“tuple”和“tie”来实现比较运算符,这是一个好主意吗?

(注: tuple和tie可以从Boost或C ++ 11中取得) 在编写只有两个元素的小型结构时,我有时会倾向于select一个std::pair ,因为所有重要的东西都已经为该数据types完成了,比如operator< for strict-weak-ordering。 缺点虽然是几乎没用的variables名称。 即使我自己创build了typedef ,两天之后我也不会记得first和second是什么,特别是如果它们是同一types的话。 这对于两个以上的成员来说更糟,因为嵌套pair非常糟糕。 另一种select是从Boost或C ++ 11中得到一个tuple ,但是看起来并没有更好更清晰。 所以我回到自己编写结构,包括任何需要的比较运算符。 由于特别是operator<可能相当麻烦,所以我想通过仅仅依赖于为tuple定义的操作来规避这个混乱: operator<例如严格弱sorting的例子: bool operator<(MyStruct const& lhs, MyStruct const& rhs){ return std::tie(lhs.one_member, lhs.another, lhs.yet_more) < std::tie(rhs.one_member, rhs.another, rhs.yet_more); } ( tie从所传递的参数构成T&引用。) 编辑 :从@DeadMG私人从tupleinheritance的build议不是一个坏的,但它有一些缺点: 如果运营商是独立的(可能是朋友),我需要公开inheritance 通过投射,我的function/操作员(特别是operator= )可以轻松绕过 有了这个tie解决scheme,如果他们对订购无关紧要,我可以省略某些成员 这个实现有什么缺点,我需要考虑吗?

序列zipfunction的C + + 11?

使用新的基于范围的for循环,我们可以编写类似的代码 for(auto x: Y) {} 哪个国际海事组织是一个巨大的改进(例如) for(std::vector<int>::iterator x=Y.begin(); x!=Y.end(); ++x) {} 它可以用来循环两个同时循环,如Pythons zip函数? 对于那些不熟悉Python的人来说,代码如下: Y1 = [1,2,3] Y2 = [4,5,6,7] for x1,x2 in zip(Y1,Y2): print x1,x2 作为输出(1,4) (2,5) (3,6)

C ++链接如何在实践中工作?

C ++链接如何在实践中工作? 我正在寻找的是关于链接如何发生的详细解释,而不是链接的命令 。 关于编译已经有一个类似的问题,这个问题没有太详细的说明: 编译/链接过程是如何工作的?

如何对浮点数执行按位运算

我试过这个: float a = 1.4123; a = a & (1 << 3); 我得到一个编译器错误,说&的操作数不能是floattypes。 当我这样做时: float a = 1.4123; a = (int)a & (1 << 3); 我正在运行程序。 唯一的事情就是按四舍五入后得到的数字的整数表示进行按位运算。 以下也是不允许的。 float a = 1.4123; a = (void*)a & (1 << 3); 我不明白为什么int可以被抛出void*但不能float 。 我正在这样做来解决在Stack Overflow问题中描述的问题如何使用遗传algorithm求解线性方程组? 。

.NET中的double multiplication损坏了吗?

如果我在C#中执行以下expression式: double i = 10*0.69; i是: 6.8999999999999995 。 为什么? 我知道像1/3这样的数字很难用二进制表示,因为它具有无限循环的小数位数,但0.69并不是这种情况。 而0.69可以很容易地用二进制表示,一个二进制数为69,另一个表示小数位的位置。 我如何解决这个问题? 使用decimaltypes?

C#好的比较值types为null

我今天遇到了这个,不知道为什么C#编译器不会抛出一个错误。 Int32 x = 1; if (x == null) { Console.WriteLine("What the?"); } 我很困惑x怎么可能是空的。 尤其是因为这个赋值绝对会引发一个编译错误: Int32 x = null; x是否可能变为null,Microsoft是否决定不把这个检查放入编译器,还是完全错过? 更新:在编写这篇文章的代码搞乱之后,编译器突然想出了一个警告,expression式永远不会是真的。 现在我真的迷失了。 我把对象放到一个类中,现在警告已经消失了,但是留下了一个问题,值types最终可能为null。 public class Test { public DateTime ADate = DateTime.Now; public Test () { Test test = new Test(); if (test.ADate == null) { Console.WriteLine("What the?"); } } }