你可以这么理解:
定义的时候,是char **str,那么cout<<**str的时候,**str就是个char。
既然**str是char,输出的当然就只有一个字符了。
另外还有其他问题,我就不一一列出了。
见注释。
#include<iostream>#include<vector>
#include<string>
using namespace std
int main()
{
string s
cout<<"请输入字符串"
vector<string>ivec
while(cin>>s)
ivec.push_back(s)
char **str=new char* [ivec.size()]
size_t index=0
for(vector<string>::iterator ix=ivec.begin()ix<ivec.end()ix++,index++) //for循环里index没有++
{
char *tp=new char [(*ix).size() + 1] //注意要多申请一个空间,用于存放'\0'
strcpy(tp,(*ix).c_str())
str[index]=tp
}
for (int i = 0 i < ivec.size() ++i)
{
cout<<str[i] << "\n" //str是个char**,那么str[i]是个char*,这样才能输出字符串
}
return 0
}
程序运行结果示意:
请输入字符串1111
222
3333
444
^Z
1111
222
3333
444
Press any key to continue
1、可以从数组构造比如int a[] = { 0,1,3,5,6,4,2.... }
vector<int>v( a, a + sizeof( a ) / sizeof( a[0] ) )
2、动态添加就只有用push_back了
可以用resize预置vector的容量,这样就能免除push_back由于空间超过默认分配的定量内存时而重分配更大的一块新空间并把原内容重新拷过去所带来的效率损失,vector内部自动维护了一块定量的内存,这个空间可以用capacity()方法查看。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)