相关疑难解决方法(0)

201
推荐指数
6
解决办法
6万
查看次数

在C/C#/ C++中进行向后循环的最佳方法是什么?

我需要向后移动一个数组,所以我有这样的代码:

for (int i = myArray.Length - 1; i >= 0; i--)
{
    // Do something
    myArray[i] = 42;
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法呢?

更新:我希望C#可能有一些内置机制,如:

foreachbackwards (int i in myArray)
{
    // so easy
}
Run Code Online (Sandbox Code Playgroud)

更新2:有更好的方法.符文获奖:

for (int i = myArray.Length; i-- > 0; )
{    
    //do something
}
//or
for (int i = myArray.Length; i --> 0; )
{
    // do something
}
Run Code Online (Sandbox Code Playgroud)

在常规C中看起来更好(感谢Twotymz):

for (int i = lengthOfArray; i--; )
{    
    //do something
}
Run Code Online (Sandbox Code Playgroud)

c c# c++

92
推荐指数
6
解决办法
13万
查看次数

什么是`int*userMask [3] [4]`指向?

我正在修改一些代码并遇到一个声明,我无法理解:

int *userMask[3][4] = {0};
Run Code Online (Sandbox Code Playgroud)

究竟是什么指向?它是一个矩阵,每个元素都是指针吗?或者它指向一个大小的矩阵[3] [4]?

谢谢


我想我的问题是userMask[2][maskElement][user]当声明为什么时可以工作int.userMask不能让它int[]正常工作吗?我不能理解这个权利......

请注意,感谢您对cdecl Robert的建议.但是,有没有人知道如何在XP命令提示符中使用它?我只能得到语法错误:(

c arrays pointers

22
推荐指数
3
解决办法
1万
查看次数

Ubuntu 11.10上的C和C++编程

我最近安装了Ubuntu 11.10以及CodeBlocks IDE,我知道默认情况下我有gcc和std库.

我的问题是:

  • 你对Ubuntu上的新C++程序员有什么建议吗?
  • 我应该从一开始就得到的任何图书馆?
  • 我错过了一个非常好的IDE?(YMMV,但我更喜欢在IDE中工作)
  • 从一开始我应该注意任何编程恩赐或陷阱?

c c++ linux ubuntu

17
推荐指数
5
解决办法
1万
查看次数

构造函数中的虚函数,为什么语言不同?

在C++中,当从构造函数中调用虚函数时,它的行为不像虚函数.

我认为第一次遇到这种行为的每个人都感到惊讶,但第二次认为这是有意义的:

只要派生的构造函数没有被执行的对象是不是又一个衍生实例.

那么如何调用派生函数呢?前提条件没有机会建立.例:

class base {
public:
    base()
    {
        std::cout << "foo is " << foo() << std::endl;
    }
    virtual int foo() { return 42; }
};

class derived : public base {
    int* ptr_;
public:
    derived(int i) : ptr_(new int(i*i)) { }
    // The following cannot be called before derived::derived due to how C++ behaves, 
    // if it was possible... Kaboom!
    virtual int foo()   { return *ptr_; } 
};
Run Code Online (Sandbox Code Playgroud)

它与Java和.NET完全相同,但他们选择了另一种方式,并且可能是最不惊讶原则的唯一原因?

你认为哪个是正确的选择?

.net c++ java language-agnostic

12
推荐指数
2
解决办法
3714
查看次数

C++链接错误:使用模板化类的未定义符号

我正在从我写的一个类中得到一些非常奇怪的链接错误.我完全无法找到任何可以描述正在发生的事情的东西.

Visual Studio(Windows XP)

players.obj:错误LNK2019:未解析的外部符号"public:__thiscall TreeNode :: TreeNode(void)"(?? 0?$ TreeNode @ VPlayer @@@@ QAE @ XZ)在函数"public:__thiscall PlayerList :: PlayerList"中引用(void)"(?? 0PlayerList @@ QAE @ XZ)

Xcode(OSX 10.5)

未定义的符号:"TreeNode ::〜TreeNode()",引用于:player.o中的PlayerList :: ~PlayerList()

头文件:generics.h

class TreeNode : public BaseNode{
public:
    const static int MAX_SIZE = -1; //-1 means any size allowed. 
    const static int MIN_SIZE = 0;
    //getters
    int size() const;
    vector<C*> getChildren() const;
    //setters
    void setChildren(vector<C*> &list);
    //Serialization
    virtual void display(ostream &out) const;
    virtual void read(istream &in);
    virtual void write(ostream &out) const; …
Run Code Online (Sandbox Code Playgroud)

c++ linker

6
推荐指数
1
解决办法
1万
查看次数

学习C++时会遇到什么,如果我来自PHP/Java?

我需要学习C++才能学习构建Nokia WRT和/或maemo应用程序.我需要知道我需要/必须学习或关注更多的问题和C++的哪些方面.我想到的一件事是C++没有垃圾收集器.因此,我需要关注变量类型.但是,有没有其他非常重要的我不能忽视它?

php c++ java qt-maemo

4
推荐指数
1
解决办法
634
查看次数

如何在C++中管理成员变量

简而言之,我的问题是将成员变量作为非托管C++中的指针.

在java或c#中,我们有"高级指针".实际上,我们无法意识到它们中的"指针".我们通常初始化类的成员,如下所示:

member = new Member();
Run Code Online (Sandbox Code Playgroud)

要么

member = null;
Run Code Online (Sandbox Code Playgroud)

但在c ++中,它变得更加混乱.我见过很多样式:使用new,或者将成员变量保留在堆栈中.

在我看来,使用boost::shared_ptr似乎很友好,但在boost本身的源代码中new到处都有.这是效率的问题,不是吗?

是否有像"尽力避免new"或其他什么的行会?

编辑

我意识到说"把它们留在堆栈中"是不恰当的,这里有一个更恰当的说法:当我需要一个object成为我的成员变量时,我应该更喜欢一个而object不是一个object*

c++ oop pointers

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