如何对const向量排序?

How can you sort a const vector?

本文关键字:排序 向量 const      更新时间:2023-10-16

如果我在类中定义了一个const向量,我该如何对它进行排序?

尝试排序const vector将给出错误,因为我正在更改const vector的内容。

你没有。如果你需要修改…那么它不应该是const。这两个目标是相互直接冲突的。

不要问一个没有意义的问题的解决方案,告诉我们你真正想要完成的是什么。您是否试图从不希望调用者能够修改的方法返回向量?在这种情况下,创建一个getter方法并返回一个const vector&

#include <vector>
class Foo
{
public:
    // clients can't change this vector directly
    const std::vector<int>& get_vector() const { return _vec; }
    // you can still create an interface that allows 
    // mutation of the vector in a safe way, or mutate
    // the vector internally.
    void push_back( int i ) { _vec.push_back( i ); }
private:
    std::vector<int> _vec;
}

它是const向量吗?还是里面需要const的数据?

如果你有一个const向量,那么可能有一个不应该修改它的原因....

话虽如此。以下是关于如何搬起石头砸自己脚的伪代码:

const std::vector< Foo* > v;  // hypothetical declaration
std::vector< Foo* >* vPtr = const_cast< std::vector< Foo* >* >(&v);
// GOOD LUCK
(*vPtr)[0] = new Foo(); 

是的,你可以在c++中对const vector进行排序。

设一个const向量为v

const vector<int> v={5,4,3,2,1};

如果你想用sort(v.begin(),v.end())对这个向量排序,那么它将导致一些运行时错误,因为违反了const。

但这就是魔法-

vector<int>*temp=(vector<int>*)&v;
sort(temp->begin(),temp->end());

可以使用另一个vector指针对vector v进行排序,并将其引用到该指针。

在此之后,如果你输出向量v,那么你将得到这样的输出-

for(int a:v)
    cout<<a<<" ";
cout<<endl;

输出:1 2 3 4 5