相关疑难解决方法(0)

按降序对矢量进行排序

我应该用吗?

std::sort(numbers.begin(), numbers.end(), std::greater<int>());
Run Code Online (Sandbox Code Playgroud)

要么

std::sort(numbers.rbegin(), numbers.rend());   // note: reverse iterators
Run Code Online (Sandbox Code Playgroud)

按降序对矢量进行排序?一种方法或另一种方法有任何好处或缺点吗?

c++ sorting iterator stl vector

296
推荐指数
10
解决办法
22万
查看次数

我什么时候应该在C++中使用new关键字?

我一直在使用C++,我一直在想新的关键字.简单地说,我应该使用它吗?

1)使用关键字...

MyClass* myClass = new MyClass();
myClass->MyField = "Hello world!";
Run Code Online (Sandbox Code Playgroud)

2)没有新的关键字......

MyClass myClass;
myClass.MyField = "Hello world!";
Run Code Online (Sandbox Code Playgroud)

从实现的角度来看,它们看起来并没有什么不同(但我确定它们是......)但是,我的主要语言是C#,当然第一种方法就是我习惯的方法.

困难似乎是方法1更难用于std C++类.

我应该使用哪种方法?

更新1:

我最近使用new关键字作为内存(或免费存储)用于超出范围的大型数组(即从函数返回).在我使用堆栈之前,导致一半的元素在范围之外被破坏,切换到堆使用确保元素是完整的.好极了!

更新2:

我的一位朋友最近告诉我,使用new关键字有一个简单的规则; 每次打字new,输入delete.

Foobar *foobar = new Foobar();
delete foobar; // TODO: Move this to the right place.
Run Code Online (Sandbox Code Playgroud)

这有助于防止内存泄漏,因为您总是必须将删除放在某处(即,当您将其剪切并粘贴到析构函数或其他方式时).

c++ pointers reference keyword new-operator

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

为什么为这个仿函数调用两次析构函数?

当我运行以下程序时,析构函数被调用两次,我试图理解为什么?

#include <iostream>
#include <vector>
#include <algorithm>

class sample
{
    public:
        sample() { std::cout << "Constructor " << std::endl; }

        ~sample() { std::cout << "Destructor" << std::endl; }

        void operator()(int i)
        {
            std::cout << i << " , "  << std::endl;
        }
};

int main()
{

    std::vector<int> iNumbers;

    for ( int i = 0 ; i < 5 ; ++i)
        iNumbers.push_back(i);

    std::for_each(iNumbers.begin() , iNumbers.end() , sample() );
}
Run Code Online (Sandbox Code Playgroud)

输出如下

Constructor
0 ,
1 ,
2 ,
3 ,
4 , …
Run Code Online (Sandbox Code Playgroud)

c++ foreach stl

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

标签 统计

c++ ×3

stl ×2

foreach ×1

iterator ×1

keyword ×1

new-operator ×1

pointers ×1

reference ×1

sorting ×1

vector ×1