有人可以解释为什么下面的排序导致seg错误?这是g ++(指针的排序向量)的已知错误吗?我正在使用g ++ 4.5.2进行编译.
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
typedef vector<int> A;
bool face_cmp(const A *x, const A *y) {
return x != y;
}
int main(int argc, char* argv[]) {
vector<A *> vec;
for (int i=0; i<100; i++) {
vec.push_back( new vector<int>(i%100, i*i) );
}
vector<A *>::iterator it;
sort(vec.begin(), vec.end(), face_cmp);
return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
在键盘上编译给出:
/usr/local/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../../include/c++/4.1.2/debug/safe_iterator.h:240:
error: attempt to decrement a dereferenceable (start-of-sequence)
iterator.
Objects involved in the operation:
iterator "this" @ 0x0xbf4b0844 {
type …Run Code Online (Sandbox Code Playgroud) 考虑反因子函数,f(n)= k其中k!是最大的因子<= n.我被告知逆因子函数是O(log n/log log n).这是真的吗?或者它只是渐近增长的非常好的近似值?我尝试了所有的方法给的东西非常接近的log(n)/日志的log(n)(一个小的因素或分母小项),但并不完全.
我有以下结构:
struct CacheNode {
set<int> *value;
int timestamp;
CacheNode() : value(new set<int>()), timestamp(0) {}
};
Run Code Online (Sandbox Code Playgroud)
我预先分配了它们的向量,如下所示:
vector<CacheNode> V(10);
Run Code Online (Sandbox Code Playgroud)
当我这样做时,CacheNode向量中的每个元素set<int>在其value字段中指向相同的元素.特别是,
V[0].value->insert(0);
cout << V[1].value->size() << endl;
Run Code Online (Sandbox Code Playgroud)
打印出来1而不是0我想要的.
预先分配向量(或声明结构)的正确方法是什么,以便每个CacheNode都有自己的set<int>实例?
(注意:我确实需要value指向一个集合的指针,因为在我的应用程序中可以让一些CacheNodes共享集合.)