社区
工具平台和程序库
帖子详情
请问VECTOR问题
znboy
2004-04-28 02:50:32
大家都知道vector是动态分配内存空间,那么我声明一个vector容器的话,他的内部机制是怎样的呢?也就是说给我要分配多大的初始化内存空间呢???
...全文
85
6
打赏
收藏
请问VECTOR问题
大家都知道vector是动态分配内存空间,那么我声明一个vector容器的话,他的内部机制是怎样的呢?也就是说给我要分配多大的初始化内存空间呢???
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zjmzs
2004-09-25
打赏
举报
回复
STL版本不同的话,VECTOR的初始化的机制是不同的,
据个简单的例子,《C++ Primer》上面说的是: int 类型 初插入后的容量是256
结果我用dev c++一小段代码测试出来却不是这样的,在我的这个版本的STL,VECTOR是按照2的n次幂增长的,既是2,4,8,16,32,64,128,256......超过当前容量时则划分一块2倍大当前容量的内存,拷贝原来的数据过来,销毁原内存......
你可以运行下面代码试一试就知道你的STL是怎么自动增长的了:
////////////////////////////////////////////////////////////////////////
#include <stdio.h>
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char *argv[])
{
vector<int> myVec;
//myVec.reserve(200); //你可以试着用reserve看看:)
cout << "myVec:size " << myVec.size() << " capacity :" << myVec.capacity() << endl;
for (int i = 0;i<=500;++i) //改变i试试
{
myVec.push_back(i);
}
vector<int>::iterator myIter = myVec.begin();
while(myIter != myVec.end())
{
cout << *myIter << endl;
myIter++;
}
cout << "myVec Now:size " << myVec.size() << " capacity :" << myVec.capacity() << endl;
return 0;
}
smiledcf
2004-04-29
打赏
举报
回复
要想了解STL内部机制,可以参考一下候捷著的《STL源码剖析》,用的是HP的STL
hsz8250
2004-04-28
打赏
举报
回复
这每个版本的VECTOR的实现都不同,如果你想知道就好去看看代码~那你就清楚啦~
holyfair
2004-04-28
打赏
举报
回复
vector 的定义是需要指定元素参数类型的
所以声明一个vector容器时,容器内元素的vector的元素也会是已知的
如 vector <vector <int> > dd;仍然按照vector的内存生成和扩张方法来实现.
只是这种扩充有了些近似于二维性质
EricZhuo
2004-04-28
打赏
举报
回复
这个你不用管它,而且标准也没规定,不同的实现有不同的做法。
你可以显示的初始化一个vector,指定它的初始大小
goodname
2004-04-28
打赏
举报
回复
请参阅c++ primer
Vector
Davinci官方帮助配置使用手册(AutoSAR).pdf
Vector
官方帮助文档,配置使用手册。从新建DaVinci工程开始一步一步的讲解如何配置工程;如何编译生成C代码;如何导入CDD、DBC等文件。手册讲解细致,可以说是手把手教学了
C++ 数组(
vector
)常用操作总结
目录 0、
vector
数组 与 内置数组 1、
vector
对象的定义和初始化方式 2、
vector
常用操作 3、使用迭代器的遍历、插入、删除操作 4、
vector
元素的重排操作(排序、逆序等) 5、
vector
数组的内存分配机制 0、
vector
数组 与 内置数组 一般来说,我们在使用 C++ 编程时会将
vector
类型的数据与类似于使用 a[N] 定义的内置数组统称为数组,两者是很类似的数据结构,在一般的任务中使用
vector
数组 与使用内置数组通常没有什么区别。两者的区别主要
Vector
的线程安全
问题
首先提一个
问题
,
Vector
是线程安全的吗? 很多人都会回答:
vector
是线程安全的。 确实,通过查看JDK源码中,
Vector
确实是线程安全的,至少
Vector
的作者是这么说的。 通过观察源码,发现
Vector
类中的大部分方法都是由 synchronized 关键字来修饰的,这也就保证了所有的对外接口都会以
Vector
对象为锁。访问
Vector
的任何方法都必须获得对象的 intrinsic lock (或叫 monitor lock ),所以在
Vector
内部,所有的方法都不会被多线
C++中
vector
<
vector
<int> >的用法
注意
vector
<
vector
<int> >后面的尖括号前面要加上空格,否则在有些编译器出现
问题
vector
<
vector
<int>> A;//错误的定义方式
vector
<
vector
<int> > A;//正确的定义方式 一、为什么是
vector
? 对于数组,大家常用索引和指针来操作数组,给程序设计带来了很大的灵活性。但是数组的越界可能会引起程序的崩溃,而且动态性不好,包括动态改变大小,动态申请。有什么办法可以解决这些
问题
吗?
C++:
vector
不是模板
问题
找到 扩展--C/C++--设置--扩展设置--C_Cpp › Default: Cpp Standard--选择高版本(如C++23)即可。2.
vector
不是模板
问题
,第一是由于没有添加#include <
vector
>。3.如果加入这些后发现还不行,出现std命名空间没有
vector
的
问题
,这是由于C++的标准过低。命名空间添加有两种,第一是直接在
vector
前面加上std::,第二是开头加入。报错3:加入
vector
后,std命名空间没有
vector
的
问题
。报错2:
vector
不是模板
问题
。
工具平台和程序库
24,856
社区成员
27,330
社区内容
发帖
与我相关
我的任务
工具平台和程序库
C/C++ 工具平台和程序库
复制链接
扫一扫
分享
社区描述
C/C++ 工具平台和程序库
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章