小编Jac*_*eng的帖子

为什么std :: sort会对此代码产生分段错误?

有人可以解释为什么下面的排序导致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)

c++ sorting segmentation-fault

5
推荐指数
3
解决办法
5501
查看次数

反因子的增长

考虑反因子函数,f(n)= k其中k!是最大的因子<= n.我被告知逆因子函数是O(log n/log log n).这是真的吗?或者它只是渐近增长的非常好的近似值?我尝试了所有的方法给的东西非常接近的log(n)/日志的log(n)(一个小的因素或分母小项),但并不完全.

math factorial

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

C++预先分配的包含指针的对象向量

我有以下结构:

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共享集合.)

c++ vector

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

标签 统计

c++ ×2

factorial ×1

math ×1

segmentation-fault ×1

sorting ×1

vector ×1