c++中说明了在使用下标访问元素时,正确的类型是vector使用vector::size_type类型,数组下标使用size_t类型

c++中说明了在使用下标访问元素时,正确的类型是vector使用vector::size_type类型,数组下标使用size_t类型,第1张

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].两种方式,那种效率高。 注:都采用下标寻址方式。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9748457.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存