Tag: stdvector

std :: dynarray vs std :: vector

C ++ 14提供了std::dynarray : std :: dynarray是一个序列容器,它封装了在构造时固定的大小的数组,并且在对象的整个生命周期中不会改变。 std::dynarray必须在运行时分配为std::vector 。 那么, std::dynarray的好处和用法是std::dynarray而我们可以使用更dynamic(也可重定义)的std::vector ?

在数组中,Java的速度比std :: vector快8倍。 我做错了什么?

我有以下Java代码与几个大数组永远不会改变他们的大小。 它运行在我的电脑上1100毫秒。 我用C ++实现了相同的代码,并使用std::vector 。 运行完全相同代码的C ++实现的时间在我的计算机上为8800毫秒。 我做错了什么,以便它慢慢运行? 基本上,代码执行以下操作: for (int i = 0; i < numberOfCells; ++i) { h[i] = h[i] + 1; floodedCells[i] = !floodedCells[i]; floodedCellsTimeInterval[i] = !floodedCellsTimeInterval[i]; qInflow[i] = qInflow[i] + 1; } 它遍历大小约为20000的不同数组。 您可以在以下链接下find两个实现: Java: https : //ideone.com/R8KqjT C ++: https : //ideone.com/Lu7RpE (因为时间限制,我只能运行400次,而不是2000次),但是即使在这里也有三次的差别)

C ++,复制设置为vector

我需要将std::set复制到std::vector : std::set <double> input; input.insert(5); input.insert(6); std::vector <double> output; std::copy(input.begin(), input.end(), output.begin()); //Error: Vector iterator not dereferencable 哪里有问题?

是std ::向量复制与push_back对象?

经过与valgrind的很多调查后,我已经得出结论,std :: vector做了一个你想push_back对象的副本。 这是真的吗? 一个向量不能保留一个对象的引用或指针,而没有副本? 谢谢

最快的方法将std :: vector <int>的每个值重置为0

将std::vector<int>每个值重置为0并保持向量初始大小的最快方法是什么? 与[]运算符的for循环?

可能std :: vector使用小缓冲区优化?

我今天在想我的同事是否可以实现std :: vector来利用小缓冲区优化。 通过查看C ++ 11草案,我在23.3.1p8阅读 对于非数组的标准容器types的容器a和b,expression式a.swap(b)应交换a和b的值,而不对每个容器元素调用任何移动,复制或交换操作。 起初似乎取消了小缓冲区优化,但是在as-if规则下,我们仍然可以为非类types进行小缓冲区优化(因为我们无法观察正在执行的副本)。 接下来的文字似乎更难以“愚弄” 每个在交换之前引用一个容器中的元素的迭代器应该在交换之后引用另一个容器中的相同元素。 这足以防止实施std :: vector的小缓冲区优化? 有没有其他的路障,或者最终是否有可能有SBO的std :: vector?

C ++ valarray与vector

我喜欢vector很多。 他们漂亮,快速。 但是我知道这个叫valarray的东西存在。 为什么我会用valarray代替vector? 我知道valarrays有一些语法糖,但除此之外,它们何时有用?

vector走出界限,不给错误

我有一个std::vector 。 我检查它的大小是6,但是当我尝试访问vec[6]来检查它是否会给出错误时,我得到没有错误,但是有一些数字。 它不应该给一个错误? 编辑:像这样的东西: struct Element { std::vector<double> face; }; int main() { Element elm; …. // insert 6 elements into elm.face std::cout << elm.face.size() << std::endl; // answer is 6 std::cout << elm.face[6] << std::endl; // answer is some number }

很好的方式来追加向量自己

我想复制向量的内容,并希望它们被添加到原始向量的末尾,即v[i]=v[i+n] for i=0,2,…,n-1 我正在寻找一个很好的方式来做到这一点,而不是一个循环。 我看到std::vector::insert但迭代版本禁止迭代器*this (即行为是未定义的)。 我也尝试了std::copy如下(但它导致分段错误): copy( xx.begin(), xx.end(), xx.end());

正确的方式来处理数组的向量

有人能告诉什么是正确的方式来处理数组的vector? 我声明了一个向量数组( vector<float[4]> ),但得到error: conversion from 'int' to non-scalar type 'float [4]' requested时试图resize它的resize 。 出了什么问题?