请教结果为什么会是这样??

来源:百度知道 编辑:UC知道 时间:2024/06/15 09:34:44
#include<iostream>
#include<vector>
#include<algorithm>
#include<cstring>
using namespace std;
void main()
{
char str[10];
vector<char *> v;
int n;
cin>>n;
while(n--)
{
cin>>str;
v.push_back(str);
}
for(vector<char *>::iterator it=v.begin();it!=v.end();it++)
cout<<(*it)<<endl;
}
输入n个字符串,再输出结果为什么不对???
或者是
v.insert(v.end(),str)
输出结果都不对

vector的模板类型为char*,即,所有push_back(...)的结果都将导致v添加一个指向数组str[10]的一个指针,从而得到的每个元素都仅仅是指向str的指针,所以,最后的输出结果将是最后一次输入的字符串内容。

1. 添加头文件<string>
2. 将char *修改为string

#include<iostream>
#include<vector>
#include<algorithm>
#include <string>

using namespace std;

int main()
{
string str; // 这里也修改为string吧
vector<string> v; // char *-> string
int n;
cin>>n;
while(n--)
{
cin>>str;
v.push_back(str);
}
for(vector<string>::iterator it=v.begin();it!=v.end();it++) // char * -> string
cout<<(*it)<<endl;
}

char str[10];

你这是一个临时的变量,输入的字符串并没有保存下来。后面输入的会覆盖掉前面输入的东西。