
vector是标准库定义的,size_t是在标准C库中定义的。
他的返回值是unsigned int型。在32位机器中,size_t占用4字节的内存空间,与多数的int型一样(少数的占2个字节)。而在64位机器中,size_t就占用8个字节的内存空间,int型与long型还是占4个字节的内存空间。所以LZ用const int来定义数组的大小是没错的,前提是要在32位机器下。反之,在64位的机器下就有问题。用size_t也就是让代码的移植性增强
个人意见,高手勿喷
1你是要
int fun(int list[],int size)
{ ………… }
函数的代码是吧
int fun(int list[],int size)
{
int i,j=0;
for(i=0;i<size;i++) //找出list中值最大的项,获取其下标
if(list[i]>list[j])
j=i;
return j;
}
-------------------------------
你复制出来的代码,多出本该有空格的地方,空格不见了,代码接在一起了。
还有,调用rand()函数,需要添加头文件#include <stdlibh>
以下是全部代码及执行情况
-------------------------------
#include<stdioh>
#include <stdlibh>
#define VSIZE 20
void wwjt();
int vector[VSIZE];
int fun(int list[],int size)
{
int i,j=0;
for(i=0;i<size;i++)
if(list[i]>list[j])
j=i;
return j;
}
main()
{
int i;
for (i=0;i<VSIZE;i++)
{
vector[i]=rand();
printf("Vector[%d]=%6d\n",i,vector[i]);
}
i=fun(vector,VSIZE);
printf("\nMaxnum:Vector[%d]=%6d\n",i,vector[i]);
wwjt();
}
void wwjt()
{
int i,t;
FILE fp ;
fp = fopen("outdat","w") ;
for (i=0;i<VSIZE;i++)
{
fprintf(fp,"Vector[%d]=%6d\n",i,vector[i]);
}
t=fun(vector,VSIZE);
fprintf(fp,"\nMaxnum:Vector[%d]=%6d\n",t,vector[t]);
fclose(fp) ;
}
肯定是第二种效率高,毕竟vector寻址要多做些工作。不过这种差别应该会非常非常小,基本可以不考虑。
用下面的代码测试,在我的机器上,二维数耗时016s, vector耗时04s。
std::vector< std::vector<int> > a;
int b[100][100];
std::vector<int> tmp;
tmpresize(100);
aresize(100, tmp);
int i, nLoop;
DWORD dwTickCount1 = GetTickCount();
for(nLoop = 0; nLoop < 10000; nLoop++)
{
for(i=0; i<100; i++)
{
for(int j=0; j<100; j++)
{
b[i][j] = i+j;
}
}
}
DWORD dwTickCount2 = GetTickCount();
for(nLoop = 0; nLoop < 10000; nLoop++)
{
for(i=0; i<100; i++)
{
for(int j=0; j<100; j++)
{
a[i][j] = i+j;
}
}
}
DWORD dwTickCount3 = GetTickCount();
CString sMsg;
sMsgFormat(_T("%fs, %fs"),
(dwTickCount2-dwTickCount1)/10000,
(dwTickCount3-dwTickCount2)/10000);
AfxMessageBox(sMsg);
首先,Vector类是list中的常用子类,其底层依赖数组来实现存储数据!,所以它会按照原样输出数据,然后你在遍历anum该枚举变量时,anumhasMoreElements()这句话只是指向一个位子并判断有没有数据而已,不会移动指针,所以会出现one two ,当循环到three时,首先Systemoutprint(astr+" "); 会输出three,然后 if(astrlength()>4) avectorremove(astr); 移除three,这里有个问题你要注意,avectorremove(astr);这句话会改变anum它的长度!!会让anum它的长度减1,所以本来下个数应该读取four的,结果因为长度减了1,所以four被跳过去了!所以输出了five,其中eight一样,因为seven被移除,也被跳过去了!再来就是最后一句Systemoutprintln(avector);因为,eight在循环时被跳过,所以,当你输出循环结束后的avector时,发现eight还在里面!!希望你能看懂!
Vector是C++ STL库中的一个非常实用的容器,其本质是一个模板类,可以方便地实现动态数组的功能。通过向尾部插入元素、删除元素等 *** 作,在不确定数据规模的情况下能够灵活地声明和使用数组。
具体地,对于Vector的用法,包括以下基本 *** 作:
1添加元素:可以使用vector的push_back()函数在Vector的末尾添加元素。
2删除元素:可以使用vector的erase()函数删除特定位置上的元素。
3访问元素:可以使用vector的下标 *** 作符、迭代器等方式进行元素的访问。
4遍历Vector:可以使用for循环、迭代器、算法等方式遍历Vector中的元素。
需要注意的是,Vector中存储的元素类型必须相同,同时也可以自定义类型。此外,Vector还支持动态改变大小、排序、查找、修改等高级 *** 作。
vector相当于数组,调用的时候可以通过取下标的方式调用,也可以通过迭代器调用,示例代码:#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main(int argc, char argv[])
{
int i = 0;
vector<string> vList;
string strTmp;
for (;i<3;i++)
{
cout<<"请输入一个字符串"<<endl;
cin>>strTmp;
vListpush_back(strTmp);
}
cout<<"使用下标遍历,您输入的三个字符串是:"<<endl;
for (i = 0; i< 3; i++)
{
cout<<vList[i]<<endl;
}
cout<<"使用迭代器遍历,您输入的"<<vListsize()<<"个字符串是"<<endl;
for (vector<string>::iterator itTmp = vListbegin(); itTmp != vListend(); ++itTmp)
{
cout<<itTmp<<endl;
}
return 0;
}
运行截图:
以上就是关于c++中说明了在使用下标访问元素时,正确的类型是vector使用vector::size_type类型,数组下标使用size_t类型全部的内容,包括:c++中说明了在使用下标访问元素时,正确的类型是vector使用vector::size_type类型,数组下标使用size_t类型、功能:把20个随机数存入一个数组,然后输出该数组中的 最大值。、C++:vector<vector<int> > a, int b[M][L].两种方式,那种效率高。 注:都采用下标寻址方式。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)