感谢在C中的解决scheme ,现在我想在C ++中使用std :: sort和vector来实现: typedef struct { double x; double y; double alfa; } pkt; vector< pkt > wektor; 用push_back()填充; 比较function: int porownaj(const void *p_a, const void *p_b) { pkt *pkt_a = (pkt *) p_a; pkt *pkt_b = (pkt *) p_b; if (pkt_a->alfa > pkt_b->alfa) return 1; if (pkt_a->alfa < pkt_b->alfa) return -1; if […]
假设我有以下vector: > x <- sample(1:10,20,replace=TRUE) > x [1] 8 6 9 9 7 3 2 5 5 1 6 8 5 2 9 3 5 10 8 2 我怎样才能find哪些元素是8或9?
另外一个问题启发了以下想法: std::vector<T>在增加容量时必须移动所有元素吗? 据我所知,标准的行为是为底层的分配器请求新的大小的整个块,然后移动所有旧的元素,然后销毁旧的元素,然后释放旧的内存。 这种行为似乎是给定标准分配器接口的唯一可能的正确解决scheme。 但是我想知道,修改allocator来提供一个reallocate(std::size_t)函数会返回一个pair<pointer, bool>并且可以映射到底层的realloc()吗? 这样做的好处是,如果操作系统实际上只能扩展分配的内存,那么根本不会有任何移动。 布尔值将指示内存是否已移动。 ( std::realloc()可能不是最好的select,因为如果我们不能扩展,我们不需要复制数据,所以实际上我们想要的东西就像extend_or_malloc_new() 。 编辑:也许是一个is_pod -trait-基于规则的专业化将允许我们使用实际的realloc ,包括它的按位副本,只是不一般。) 这似乎是一个错过的机会。 最糟糕的情况是,你总是可以实现reallocate(size_t n)作为return make_pair(allocate(n), true); ,所以不会有任何处罚。 是否有任何问题,使这个function不适合或不适合的C + +? 也许唯一可以利用这个的容器是std::vector ,但是这又是一个相当有用的容器。 更新:一个小例子来澄清。 当前resize() : pointer p = alloc.allocate(new_size); for (size_t i = 0; i != old_size; ++i) { alloc.construct(p + i, T(std::move(buf[i]))) alloc.destroy(buf[i]); } for (size_t i = old_size; i < […]
今天我跑了一个非常微妙的问题,我想请你的意见。 考虑以下花园式的共同成语成语课: struct S { S() : p_impl(new impl) {} private: struct impl; boost::shared_ptr<impl> p_impl; }; 当你试图用下列方法把它们放到vector中时,乐趣就会出现: std::vector<S> v(42); 现在,至less在MSVC 8中, v所有元素共享相同的impl成员。 其实,是什么导致这是vector构造函数: template <typename T, typename A = …> class vector { vector(size_t n, const T& x = T(), const A& a = A()); … }; 在场景下,只有一个S对象被默认构造, vector的n元素被复制。 现在,用C ++ 11,有右值引用。 所以它不能这样工作。 如果一个vector被构造成 std::vector<S> […]
将std::vector<int> intVec为std::vector<double> doubleVec的好方法是什么? 或者更一般地说,转换两种可转换types的向量?
我正在优化一个函数,我想摆脱缓慢的循环。 我正在寻找一种更快的方法来将matrix的每一行乘以一个向量。 有任何想法吗? 编辑: 我不是在寻找一个“古典”的乘法。 例如。 我有matrix,有23列25行和长度为23的向量。结果我想要matrix25x23,每行乘以向量。
我想在GDB中检查一个std::vector的内容,我该怎么做呢? 为了简单起见,我们假设它是一个std::vector<int> 。
std::array和std::vector什么区别? 你什么时候使用其他的? 我一直使用和考虑std:vector作为使用C数组的C ++方式,所以有什么区别?
我有一个std :: vector <int>,我想删除第n个元素。 我怎么做? std::vector<int> vec; vec.push_back(6); vec.push_back(-17); vec.push_back(12); vec.erase(???);
我想交织相同模式和相等长度的两个向量。 说: a <- rpois(lambda=3,n=5e5) b <- rpois(lambda=4,n=5e5) 我想交织或交织这两个向量,创build一个等价的向量c(a[1],b[1],a[2],b[2],…,a[length(a)],b[length(b)]) 我的第一个尝试是这样的: sapply(X=rep.int(c(3,4),times=5e5),FUN=rpois,n=1) 但是它要求rpois被称为比需要更多的次数。 到目前为止,我的最佳尝试是将其转化为一个matrix并重新转换成一个vector: d <- c(rbind(rpois(lambda=3,n=5e5),rpois(lambda=4,n=5e5))) d <- c(rbind(a,b)) 有没有更好的方法去做呢? 还是有一个在基地Rfunction完成相同的事情?