草庐IT

vector_c

全部标签

c++ - 在 std::vector 上强制执行大小约束的非侵入式方法?

我想要某种std::vector元素不能超过constintMAX_LENGTH元素。我知道我不能覆盖std::vector非虚拟函数,我需要这样做才能在所有相关成员函数中进行大小检查(例如,assign,push_back...有很多)。最明显的方法是将std::vector包装在class中,以确保不会添加超出最大长度的操作。但这似乎很笨拙。有没有比包装类更优雅的解决方案来限制std::vector的大小? 最佳答案 您确定vector本身不能增长,或者只有这种vector的消费者需要限制参数的大小?如果是后者,那么只需asse

c++ - 重新分配 std::vector 对象时指向内部数据结构的指针的有效性

假设有一个类A包含一个整数vector。现在假设创建了一个A的vector。例如,如果由于push_back而发生A对象的重新分配(因此vector对象被移动),指向int本身的指针是否仍然有效?这有保证吗?澄清一下:classA{public:A(){};std::vectora={1,2,3,4,5,6,7,8,9};};intmain(){std::vectoraVec(2);int*x1=&(aVec[1].a[2]);A*x2=&aVec[1];std::cout运行这段代码会得到:0x1810088-0x1810028-20x1810088-0x18100c8-30所以它表

c++ - 调试涉及使用 : vector, 字符串、STL 的 C++ 代码

我是C++初学者。当我尝试使用以下构造(如字符串、某些native类型的vector、STL等)调试C++代码时,调试变得乏味。我使用MSVisualStudio2010/VisualC++2010Express。例如--使用字符串时如下:stringstr;getline(cin,str);for(i=0;i观察窗口不显示str[i]的值。它说未找到重载运算符。我必须手动折叠整个字符串变量str并在该特定索引处查看charelem,这很麻烦。--如下使用vector时,同样的问题。如果我在监window口中设置变量v1[k]相同的错误。vectorv1(100);for(intk=0

c++ - 当我将实例添加到 vector 时,为什么会调用我的类的析构函数?

似乎每次我向vectorm_test添加一个对象时,都会调用析构函数方法。我错过了什么吗?我怎样才能防止这种情况发生?classTEST{public:TEST();~TEST();int*x;};TEST::TEST(){}TEST::~TEST(){...itiscalledeverytimeIpush_backsomethingtothevector...deletex;}vectorm_test;for(unsignedinti=0;i 最佳答案 这里的问题是您违反了RuleofThree.你的类有一个析构函数,所以你也需要

c++ - 从 std::vector 中的每个结构中选择单个成员到另一个 vector 中

我有一个VisualStudio2008C++项目,我想将该结构类型的vector的一个结构元素复制到一个新vector。例如:structFoo{inta;longb;};std::vectorv1;std::vectorv2;for(std::vector::const_iteratorit=v1.begin();it!=v1.end();++it){v2.push_back(it->b);}还有比这更好/更优雅的方法吗?谢谢,保罗H 最佳答案 在VisualC++2008中,不,这几乎是“优雅”的。标准库提供了可用于操作容器的

c++ - 为什么我不能用 T=vector<int> 实例化 operator<<(ostream&, vector<T>&)?

在思考C++iteratorquestion,我写了这个示例程序:#include#include#include#includetemplatestd::ostream&operator&v){os(os,","));returnosv(3);std::vector>vv(3,v);std::cout我用gcc编译这个程序并得到典型的100行错误。我相信相关的部分是:it.cc:19:instantiatedfromhere/usr/include/c++/4.4/bits/stream_iterator.h:191:error:nomatchfor‘operator((std::o

c++ - std::vector<bool> 保证默认所有条目为假?

我希望将std::vector中的所有条目调整为所需的容器大小后都为false。这似乎是测试的情况,但我似乎找不到任何文件可以保证总是如此。我意识到我可以自己将所有内容都设置为false,但如果已经保证每个条目都默认为false,这似乎效率低下(它是一个大小合适的vector,将在数千个地方创建)。对此有任何保证吗?提前致谢。 最佳答案 resize将默认插入元素,按照(C++11)标准调用:allocator_traits::construct(m,p)在哪里m是分配器,p指向目标地址。这反过来(假设m是标准分配器)调用m.con

C++:指针 vector 在 push_back() 之后失去引用

在我的代码中,a有一个Node对象的全局vector和一个Node指针的局部vector:#include#include#includeusingnamespacestd;classNode{intn;public:Node(inti):n(i);intgetN(){returnn;}};vectorv;intmain(){vectorp;v.push_back(Node(1));p.push_back(&v[0]);printf("firstnodeid:%d\n",(*p[0]).getN());return0;}我将一个节点对象插入到全局vector中,并将该对象的指针插入到本

c++ - 对 vector 内的结构成员求和

考虑以下几点:typedefstruct{inta;intb;intc;intd;}ABCD;typedefstd::vectorVecABCD;假设我想将VecABCD类型vector中的每个“a”成员相加。简单的!我只是循环遍历vector,然后进行求和。intCalcSumOfA(constVecABCD&vec){intsumOfA=0;VecABCD::const_iteratorit;for(it=vec.begin();it!=vec.end();it++)sumOfA+=it->a;returnsumOfA;}假设我想对“b”做同样的事情?简单的!我会写......基本

c++ - 获取插入 vector 中的对象的索引

如何获取对象实际插入的位置?#includeusingnamespacestd;vectorlist;SomeClassobject;list.push_back(object);list[...].method();//Idonothavethekey不幸的是,push_back没有返回任何东西,因为它的返回类型是void。 最佳答案 如果v是您的vector,则以下将为您提供位置(即索引):v.push_back(object);size_tpos=v.size()-1;或者你可以在调用push_back()之前查看size()