C++用int数组给vector初始化

yellow_toucan 2017-02-17 11:03:54
int main(int argc, char** argv) {
int a[]={34,2,56,534,7,5};
vector<int> c; //用数组对int容器赋值
c.assign(a,a+6);
show(c);

return 0;
}




a[]里面有6个整数,定义vector<int>c;
利用c.assign(a,a+6)给c赋值,为什么只有后5个整数给了c?


希望各位大神赐教
...全文
917 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ftworld21 2017-06-29
  • 打赏
  • 举报
回复
请问版主 什么是模板推导?
paschen 版主 2017-02-18
  • 打赏
  • 举报
回复
引用 5 楼 huangxiaoyuyu 的回复:
追问一个问题: 我写了一个显示数组元素的show函数:void show(int a[ ]),利用在网上搜到的sizeof操作符实现对数组的遍历
void show(int a[]){
	int len=sizeof(a)/sizeof(int);
	for (int i = 0; i <len; i++)  
    {  
        cout<<a[i]<<" ";  
    }  
    cout<<"len="<<len<<endl; 
}
跟上面一样定义数组int a[]={34,2,56,534,7,5};在main()里面运行show(a); 可是为什么show只能输出前两个元素呢? 作为对比,我把show里面执行的语句直接在main里面执行,却能输出所有的元素,找不出问题所在...
#include <iostream>
#include<vector>
using namespace std;

void show(int a[]){
	int len=sizeof(a)/sizeof(int);
	for (int i = 0; i <len; i++)  
    {  
        cout<<a[i]<<" ";  
    }  
    cout<<"len="<<len<<endl; 
}

int main(int argc, char** argv) {
	int a[]={34,2,56,534,7,5};
	
	show(a);
	//利用show函数输出数组元素 
	int len=sizeof(a)/sizeof(int);
	for (int i = 0; i <len; i++)  
    {  
        cout<<a[i]<<" ";  
    }  
    cout<<"len="<<len<<endl; 
	//直接在main里面用相同代码输出数组元素 
	
	
	return 0;
}
运行结果如下:
数组作为参数时已经退化为了指针 一种就是使用模板推导,一种就多加一个参数,调用函数时将大小通过参数传入函数
AlbertS 2017-02-17
  • 打赏
  • 举报
回复
应该是show函数的问题,这个函数是不是你自己写的,注意一下数组的下标,或者把代码贴出来看看
paschen 版主 2017-02-17
  • 打赏
  • 举报
回复
c中的元素肯定会有6个,应该是你show函数中显示时只显示了后面5个 注意第一个元素下标是0
yshuise 2017-02-17
  • 打赏
  • 举报
回复
void show(int a[],int len){ //把len做为参数传入函数 for (int i = 0; i <len; i++) { cout<<a[i]<<" "; } cout<<"len="<<len<<endl; }
yellow_toucan 2017-02-17
  • 打赏
  • 举报
回复
那有没有办法通过写一个函数对一个数组实现遍历呢?
yshuise 2017-02-17
  • 打赏
  • 举报
回复 2
void show(int a[]){ int len=sizeof(a)/sizeof(int); ======================== 这种写法是错误的。因为数组会退化成指针,所以得到的len不够
yellow_toucan 2017-02-17
  • 打赏
  • 举报
回复
追问一个问题:
我写了一个显示数组元素的show函数:void show(int a[ ]),利用在网上搜到的sizeof操作符实现对数组的遍历
void show(int a[]){
int len=sizeof(a)/sizeof(int);
for (int i = 0; i <len; i++)
{
cout<<a[i]<<" ";
}
cout<<"len="<<len<<endl;
}

跟上面一样定义数组int a[]={34,2,56,534,7,5};在main()里面运行show(a);
可是为什么show只能输出前两个元素呢?
作为对比,我把show里面执行的语句直接在main里面执行,却能输出所有的元素,找不出问题所在...
#include <iostream>
#include<vector>
using namespace std;

void show(int a[]){
int len=sizeof(a)/sizeof(int);
for (int i = 0; i <len; i++)
{
cout<<a[i]<<" ";
}
cout<<"len="<<len<<endl;
}

int main(int argc, char** argv) {
int a[]={34,2,56,534,7,5};

show(a);
//利用show函数输出数组元素
int len=sizeof(a)/sizeof(int);
for (int i = 0; i <len; i++)
{
cout<<a[i]<<" ";
}
cout<<"len="<<len<<endl;
//直接在main里面用相同代码输出数组元素


return 0;
}

运行结果如下:

yshuise 2017-02-17
  • 打赏
  • 举报
回复
c++11有更好的办法: vector<int> c={34,2,56,534,7,5};
yellow_toucan 2017-02-17
  • 打赏
  • 举报
回复
void show(vector<int> a){
	int i;
	for(i=0;i<a.size();i++){cout<<a[i]<<"  ";}
	cout<<endl;
}  //输出int容器内所有元素 
的确是show()的问题,我的下标是从1开始的,是我自己犯了低级错误,谢谢各位!

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧