我需要向后移动一个数组,所以我有这样的代码:
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) 我正在修改一些代码并遇到一个声明,我无法理解:
int *userMask[3][4] = {0};
Run Code Online (Sandbox Code Playgroud)
究竟是什么指向?它是一个矩阵,每个元素都是指针吗?或者它指向一个大小的矩阵[3] [4]?
谢谢
我想我的问题是userMask[2][maskElement][user]当声明为什么时可以工作int.userMask不能让它int[]正常工作吗?我不能理解这个权利......
请注意,感谢您对cdecl Robert的建议.但是,有没有人知道如何在XP命令提示符中使用它?我只能得到语法错误:(
我最近安装了Ubuntu 11.10以及CodeBlocks IDE,我知道默认情况下我有gcc和std库.
我的问题是:
在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完全相同,但他们选择了另一种方式,并且可能是最不惊讶原则的唯一原因?
你认为哪个是正确的选择?
我正在从我写的一个类中得到一些非常奇怪的链接错误.我完全无法找到任何可以描述正在发生的事情的东西.
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++才能学习构建Nokia WRT和/或maemo应用程序.我需要知道我需要/必须学习或关注更多的问题和C++的哪些方面.我想到的一件事是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*?