草庐IT

vector_m

全部标签

c++ - 为什么 libc++ std::vector 在内部保留三个指针而不是一个指针和两个大小?

我正在查看libc++中std::vector的实现,我注意到它在内部保留了三个指针(一个指向开始,一个指向结束,一个指向分配内存的末尾),而不是我本能的做,即一个指向开始的指针和两个size和capacity成员。这里是来自libc++的的代码(忽略压缩对,我知道是什么意思)。pointer__begin_;pointer__end_;__compressed_pair__end_cap_;我注意到其他标准库也这样做(例如VisualC++)。我看不出这个解决方案应该比其他解决方案更快的任何特殊原因,但我可能错了。那么“三指针”解决方案优于“指针+大小”解决方案有什么特别的原因吗?

c++ - 为什么 libc++ std::vector 在内部保留三个指针而不是一个指针和两个大小?

我正在查看libc++中std::vector的实现,我注意到它在内部保留了三个指针(一个指向开始,一个指向结束,一个指向分配内存的末尾),而不是我本能的做,即一个指向开始的指针和两个size和capacity成员。这里是来自libc++的的代码(忽略压缩对,我知道是什么意思)。pointer__begin_;pointer__end_;__compressed_pair__end_cap_;我注意到其他标准库也这样做(例如VisualC++)。我看不出这个解决方案应该比其他解决方案更快的任何特殊原因,但我可能错了。那么“三指针”解决方案优于“指针+大小”解决方案有什么特别的原因吗?

c++ - 如何在 C++ 中使用带有指向对象的指针 vector 的查找算法?

我想在对象指针vector中找到匹配对象。这是一个示例代码来说明我的问题:classA{public:A(stringa):_a(a){}booloperator==(constA&p){returnp._a==_a;}private:string_a;};vectorva;va.push_back(newA("one"));va.push_back(newA("two"));va.push_back(newA("three"));find(va.begin(),va.end(),newA("two"));我想找到插入vector中的第二个项目。但是由于vector被定义为一个指针集合

c++ - 如何在 C++ 中使用带有指向对象的指针 vector 的查找算法?

我想在对象指针vector中找到匹配对象。这是一个示例代码来说明我的问题:classA{public:A(stringa):_a(a){}booloperator==(constA&p){returnp._a==_a;}private:string_a;};vectorva;va.push_back(newA("one"));va.push_back(newA("two"));va.push_back(newA("three"));find(va.begin(),va.end(),newA("two"));我想找到插入vector中的第二个项目。但是由于vector被定义为一个指针集合

c++ - 将 unique_ptr 添加到 vector 中的类会导致 3 倍 boost

背景我有一个大图(100k个节点),其中每个节点必须为每个出边存储一些信息。而不是将其保存在std::vector中,我正在使用dynamic_bitset从Boost1.58开始,可以执行按位运算。每个节点还保留一个指向某个多态对象的指针。一个最小的例子看起来像这样,structNode{std::vectorsucc;boost::dynamic_bitsetsucc_flags;std::unique_ptrdata;};问题考虑这个简单的基准程序,它创建和销毁一个图:#include#include#includeconstexprintN=50000;structNode{s

c++ - 将 unique_ptr 添加到 vector 中的类会导致 3 倍 boost

背景我有一个大图(100k个节点),其中每个节点必须为每个出边存储一些信息。而不是将其保存在std::vector中,我正在使用dynamic_bitset从Boost1.58开始,可以执行按位运算。每个节点还保留一个指向某个多态对象的指针。一个最小的例子看起来像这样,structNode{std::vectorsucc;boost::dynamic_bitsetsucc_flags;std::unique_ptrdata;};问题考虑这个简单的基准程序,它创建和销毁一个图:#include#include#includeconstexprintN=50000;structNode{s

C++随机迭代 vector

我正在开发一个多线程程序,其中所有线程共享一些vector(只读)。每个线程的目标是遍历整个vector。尽管如此,所有线程都必须以不同的方式访问这个vector。由于vector是const并且在所有线程之间共享,我不能使用random_shuffle并对其进行迭代。现在我的解决方案是构建一个交叉引用vector,它将包含共享vector上的索引,然后打乱这个vector,即std::vectorcrossref(SIZE);//SIZEisthesizeofthesharedvectorstd::iota(std::begin(crossref),std::end(crossref

C++随机迭代 vector

我正在开发一个多线程程序,其中所有线程共享一些vector(只读)。每个线程的目标是遍历整个vector。尽管如此,所有线程都必须以不同的方式访问这个vector。由于vector是const并且在所有线程之间共享,我不能使用random_shuffle并对其进行迭代。现在我的解决方案是构建一个交叉引用vector,它将包含共享vector上的索引,然后打乱这个vector,即std::vectorcrossref(SIZE);//SIZEisthesizeofthesharedvectorstd::iota(std::begin(crossref),std::end(crossref

c++ - 您将如何使用 C++11 初始化函数结果的 const vector ?

是否可以使用generate_n之类的东西来创建一个由随机数组成的constvector?如果不派生vector并在构造函数中进行赋值,我想不出办法。 最佳答案 如果您愿意,可以使用静态助手或lambda;正如评论中指出的那样,移动语义/复制省略将使这非常便宜,因为所有体面的编译器都会省略助手返回的vector的完整拷贝。相反,他们只会创建代码来填充单个vector,然后使用该vector。std::vectorHelper(){constsize_tn=10;std::vectorx(n);std::generate_n(x.be

c++ - 您将如何使用 C++11 初始化函数结果的 const vector ?

是否可以使用generate_n之类的东西来创建一个由随机数组成的constvector?如果不派生vector并在构造函数中进行赋值,我想不出办法。 最佳答案 如果您愿意,可以使用静态助手或lambda;正如评论中指出的那样,移动语义/复制省略将使这非常便宜,因为所有体面的编译器都会省略助手返回的vector的完整拷贝。相反,他们只会创建代码来填充单个vector,然后使用该vector。std::vectorHelper(){constsize_tn=10;std::vectorx(n);std::generate_n(x.be