移动学习网 导航

C++容器Vector问题 VS2013的vector容器问题

2024-05-22m.verywind.com
C++中vector容器可以存放vector容器吗?~

可以。
vector作为容器模板,可以存放任何类型的对象。
如定义
vector a;
就是定义了元素为整型的容器。
如果写作
vector > b;
这个容器b中的元素,就是一个vector容器。也就是说,可以将之前定义的容器a,加入到这个容器b中,这样也就是容器中存放容器。
不过,虽然都是vector,但这两个vector的类型是不同的。

#include ;

头文件加上他 我是新手 今天下午写了一下午的 vector里面的运行机制 然后自己写个类实现他的功能。。。

首先,不管怎样,你这个static绝对是不科学的。
假设有一个头文件,叫test.h 来定义与VECCOM相关的操作之类的东西。然后test.cpp用来实现tetst.h中定义的操作。然后在main.cpp文件中,引入test.h头文件,调用test.h中定义的方法,以及访问VECCOM变量,那么存在以下几种情况:
1。VECCOM定义在test.h中,static vector<COMPARADB*> VECCOM;

那么test.cpp中实现的那些在test.h中定义的方法是可以访问VECCOM的,但是在main.cpp文件中是无法直接访问VECCOM变量的(不管有没有 extern static vector<COMPARADB*> VECCOM;这一句,都是一样的),只能通过调用test.h调用的方法这种形式访问。尽管编译会通过。
2。VECCOM定义在test.h中,vector<COMPARADB*> VECCOM;//注意不是static
这种是无法通过编译的。不论是在test.cpp中加入extern还是在main.cpp中加入extern都将会出现:一个或多个多重定义的符号 这个问题。
3。VECCOM定义在test.cpp中,static vector<COMPARADB*> VECCOM;
那么在main.cpp中,如果没有extern vector<COMPARADB*> VECCOM;这句,直接使用 VECCOM会导致未定义变量的错误。如果添加vector<COMPARADB*> VECCOM;这句,又会出现无法解析的外部符号的链接错误。
4。正确的做法:VECCOM定义在test.cpp中,vector<COMPARADB*> VECCOM;//没有satatic
在main.cpp中 extern vector<COMPARADB*> VECCOM; 此时,OK,在test.cpp以及在main.cpp中都能直接使用VECCOM。

综上就是说,加入static 的全局变量,是只限于当前文件使用的,其他文件无法访问。
而其他文件想要访问在别的文件中定义的全局变量,是需要用extern 外部链接一下的。

看看你的B中有没有再次定义你的VECCOM,如果没有,但是程序没报错,看看调用2个cpp文件的顺序是不是出错了

如果再次定义了,你的vector是不是整个工程的,仅仅是每个cpp的。在你的B的定义前面加上extern

你设置的是static的全局静态vector, 这种情况下, VECCOM只为本文件服务, 不能被其他文件使用和访问, 也就是说你在CPP文件A中push_back之后,你可以查看到它非空; 但是你在CPP文件B中是无法访问到这个vector的.
你试试在A中只是设置为全局变量, 然后在B 中extern 声明一下, 再进行访问.

你这是不是多线程操作啊。有危险的哦。这么加进去了,那边可能不能立刻读到的哦。

你啥意思,元素添加和查询哪个在前,如果查询在前肯定是空

  • 【C++ STL】vector 中为什么没有push_front?
  • 答:首先,你得要先明白,vector是开辟一块空间来作为数组来存放元素(随机迭代器),如果有了pop_front,pop_back这个功能则很容易造成内存碎片,pop_front会造成头部内存产生碎片,pop_back朝臣尾部内存产生碎片,所以不能像deque(双向迭代器)那样有pop_front, pop_back这样的完全相同的实现.其次才是性能上的问题,...

  • c++ vector容器怎么输出某个元素
  • 答:.vector容器中常用的函数。(c为一个容器对象)c.push_back(elem); 在容器最后位置添加一个元素elem c.pop_back(); 删除容器最后位置处的元素 c.at(index); 返回指定index位置处的元素

  • C++中map,vector容器的<(小于号)比较算法是否为严格弱序算法?_百度知 ...
  • 答:首先,两个vector容器之间只有“==”和“!=”两种关系,vector容器内部元素的类型也不一定要重载小于号。不过,如果要对一个vector进行排序的话,那么元素一定要重载小于号,而且是严格弱序。因为sort函数对于A和B来说,如果A<B和B<A同时不成立的话,那么A就等于B。如果在 A != B 时,出现A < ...

  • C++中vector<int>a,b(n,0)什么意思
  • 答:vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的.用法:1.文件包含:首先在程序开头处加上include<vector>以包含所需要的类文件vector 还有一定要加上using namespace std;2.变量...

  • 如何删除容器vector里面的所有元素
  • 答:clear() 清空所有元素 empty() 判断Vector是否为空(返回true时为空)erase() 删除指定元素 (可以用指针来代替迭代器)iterator erase( iterator loc ); //要删除元素的迭代器 iterator erase( iterator start, iterator end ); //要删除的第一个元素的迭代器,要删除的第二个元素的迭代器 ...

  • c++, 我不太明白vector都是什么时候用呢?
  • 答:vector和数组是一样的东西,如果你去看源码,你会发现vector里面最终的存储也是数组,只是vector将数组做了类的封装,这样原来C语言中的数组的一些问题,如越界、数组大小这些都可以在vector中得到比较好的处理,基本上来说,在C++中能用到数组的地方,都可以用vector来代替,但是有一些地方数组是不能被...

  • c++中vector容器是一个模板类,可以存放任何类型的对象请问存放的到底...
  • 答:看你具体存放的类型,如果是普通值类型如(int,double)等,存的就是它的值。如果是指针类型(int*,void*)等,也一样就是这个指针。如果是类类型如(std::string)等,就是它个一份拷贝。

  • C++ vector分段处理
  • 答:设分数为:30,40,50,10,20,80,90,60,70 输出结果 下面是两种方法的代码 include <vector>#include <iostream>using namespace std;typedef vector<int> vector_t;ostream& operator<<(ostream& arg_ostr, vector_t const& arg_value) { arg_ostr << "{"; for (vector_t::value_typ...

  • c++中vector<string>可以存放什么数据
  • 答:利用C++做信号处理方面的仿真,于是就涉及到了大量数据的存储。由于在读取数据的时候,并不知道数据的长度,这时候,vector就很好用了,因为vector容器不用知道数组的长度。编写程序读入一组string类型的数据,并将它们存储在vector中,接着,把该vector对象复制给一个字符指针数组。为vector中的每个元素创建...

  • c++中的vector是如何保存string的?
  • 答:看了那么多人的回答,回答的却都是保存指针的说法,其实这是错误的,STL中的所有容器提供的都是值语义,也就是说当你把一个string对象放入vector时,vector中保存的是string的一个完整的拷贝,而不是指针。对于这一点在《C++ Standard Library: A Tutorial and Reference》一书中的5.10.2节中有详细...

    户户网菜鸟学习
    联系邮箱
    返回顶部
    移动学习网