草庐IT

c++ - 为什么要指向数组或 vector 中最后一个元素之后的内存位置?

假设我们有一个名为data的数组,大小为5。如果我们将此数组作为参数传递给std::end函数,如int*ptr=std::end(data);它将返回一个指针,指向数组中最后一个元素之后的内存位置。问题让指针指向数组中最后一个元素之后的内存位置有什么意义?为什么不直接指向数组中的最后一个元素? 最佳答案 能够从其中包含元素的容器/序列中分辨出“空”容器/序列。如果容器为空,则指向其第一个元素的指针将指向末尾,与“结束”位置相同。ANULL也可以使用指针,但由于迭代器必然是指针,因此NULL不适用。也可以使用迭代器的默认值。在泛型编

c++ - 编译器如何区分 "vector::insert"的两个变体?

我正在实现一个简单的std::vector。有两个insert函数:templatetypenameVector::iteratorVector::insert(const_iteratorpos,size_typecount,constT&value){checkIterator(pos);autop=const_cast(pos);if(count==0){returnp;}for(size_typei=0;itemplatetypenameVector::iteratorVector::insert(const_iteratorpos,InputItfirst,InputItla

c++ - 从 std::vector 中过滤掉元素的有效方法

为了从std::vector中过滤掉一些坏元素,我最终使用了以下代码:#include#include#includetypedefstructmystruct{intid;std::stringname;};intmain(){std::vectorall_items={{151,"test1"},{154,"test4"},{152,"test2"},{151,"test1"},{151,"test1"},{153,"test3"}};std::vectorbad_ids={151,152};std::vectorfilter_items;for(constauto&item:al

c++ - vector 和原始 C 风格数组之间的性能比较

我分析了C++vector和C风格数组之间的性能。结果有点出乎意料,因为文献说vector的性能应该非常接近原始数组,但事实并非如此。我在分析中做错了什么吗?voidgetVector1(intn){if(nivec(n);inti=0;for(auto&x:ivec){x=++i;}autotp2=std::chrono::steady_clock::now();std::chrono::durationdd=tp2-tp1;printf("spend%6.2fustimetocreate:%delementsvectorinside%s()at%s:%d\n",dd.count()

c++ - 如何正确使用带有 boost const_buffers vector 的 boost async_write?

我在正确设置这一行时遇到了问题:boost::asio::async_write(serialPort,boost::asio::buffer(boost::asio::buffer_cast(vector_.front()),boost::asio::buffer_size(vector_.front())))vector_包含一些boost::asio::const_buffersstd::vectorvector_;这个东西有效,但我很确定有一种更优雅的方法可以做到这一点,如果没有,我想从有更多经验的人那里得到。那么,这个方案还能改进吗?如果是,怎么办?

c++ - 无法从大括号括起来的初始值设定项列表转换为 std::vector

我看到了很多类似的问题,但我不认为我看到了完全相同的问题。这是非常基本的。我讲师的一些代码无法编译,我将问题提炼到这个测试用例中:voidfoo(vectorv){}voidfooUsage(){foo({0,1,2});}这失败了:couldnotconvert'{0,1,2}'from''to'std::vector注意:它适用于GCC5.0.020141228,但在我的GCC4.7.1(tdm-1)上失败。抱歉,如果这太基础了,但我不太了解C++11。 最佳答案 这是一个knownbugthatwasfixedingcc4.8

c++ - Qt Creator 的自动完成(智能感知)不适用于 std::vector 元素

如何使QtCreator中的自动完成功能适用于std::vector?不工作正常吗?例如,在一个全新的项目中,我创建了一个structfoo{intbar;};.如果我创建一个foo的QVector,intellisense/autocomplete工作正常:但是对于std::vectorv2在我按下v2[0].中的点后,没有任何反应我使用的是QtCreator3.3.0,使用的是VisualStudio编译器工具链(因此STL来自VS,而不是gcc,如果这有任何区别的话)。编辑:我发现了一个相关的错误报告(尽管是关于迭代器的)-https://bugreports.qt.io/bro

c++ - vector<bool> 迭代器有任何保证吗?

cppreference表示vector的迭代器特化是实现定义的,许多不支持像ForwardIterator这样的特征(因此RandomAccessIterator)。cplusplus加个神秘的“最”:Thepointeranditeratortypesusedbythecontainerarenotnecessarilyneitherpointersnorconformingiterators,althoughtheyshallsimulatemostoftheirexpectedbehavior.我无法访问官方规范。vector是否保证任何迭代器行为?迭代器?更具体地说,如何编写

c++ - 将唯一指针 vector 复制到新 vector 中

当我编译下面的代码时,出现编译错误:std::vector>tmpVec;for(constauto&it:hrzBoxTmpMap){for(constauto&it2:hrzBoxVec){std::copy_if(hrzBoxVec.begin(),hrzBoxVec.end(),tmpVec.begin(),[&](std::unique_ptr&p){return!(it.second==p->getTop()&&it.first!=p->getLeft());});}}编译错误为:/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../..

c++ - C++ Vector push_back() 的详细信息

我正在尝试调试一个程序,这样做与我对C++vectorpush_back()函数的理解发生了冲突。为了说明我的观点,我编写了以下短程序:#include#include#includeusingstd::cout;usingstd::endl;usingstd::vector;classTest{private:intmTestMember;public:Test(intval);Test(constTest&);intGetValue()const;};Test::Test(intval){couttests;tests.push_back(Test(int(5)));cout如果我