vector有很多操作,我建议你看一下这个资料,记录这个网址,对你以后学习c/c++都会很有帮助的
http://en.cppreference.com/w/cpp/container/vector
参考资料: http://en.cppreference.com/w/cpp/container/vector
c++ vector<string> 如何 erase
#include <vector>
#include <iostream>
using namespace std;
vector<string> name;
for (int i = 0; i < 10; i++)
{
string name2;
cin >> name2;
name.push_back(name2);
}
然后如何用迭代器erase删除某个元素?
#include
#include
using namespace std;
vector name;
for (int i = 0; i < 10; i++)
{
string name2;
cin >> name2;
name.push_back(name2);
}
//定义迭代器, 比较你想要删除的string。
//比如 想删除 123;
vector name;
for (int i = 0; i < 10; i++)
{
string name2;
cin >> name2;
name.push_back(name2);
}
vector::iterator nameIt;
string s("123");
name.erase( remove(name.begin(),name.end(),s) ,name.end() );
for(nameIt = name.begin(); nameIt != name.end(); ++nameIt)
{
cout << *nameIt << endl;
}
ector<string> 如何初始化 [问题点数:20分,结帖人hhulx]
收藏
-
-
hhulx
-
hhulx
-
本版等级:
-
结帖率:100%
-
|
楼主
发表于: 2011-03-09 20:33:46
如下所示
1
2
3
4
5
6
7
8
9
10
11
|
vector<string> strArray(10);
strArray[0] =
"hello"
;
strArray[1] =
"world"
;
strArray[2] =
"this"
;
strArray[3] =
"find"
;
strArray[4] =
"gank"
;
strArray[5] =
"pink"
;
strArray[6 ]=
"that"
;
strArray[7] =
"when"
;
strArray[8] =
"how"
;
strArray[9] =
"cpp"
;
|
有没有更好的初始化方式?
id="tad2" marginwidth="0" marginheight="0" frameborder="0" scrolling="no" width="100%" src="http://bbs.csdn.net/sda/TopicBodyBottom.htm" style="box-sizing: content-box;">
|
|
-
-
delphiwcdj
-
delphiwcdj
-
本版等级:
-
|
#1 得分:0
回复于: 2011-03-09 20:36:07
strArray.push_back("hello");
……
|
|
-
-
delphiwcdj
-
delphiwcdj
-
本版等级:
-
|
#2 得分:10
回复于: 2011-03-09 20:38:02
string str[n]={"hello", ...};
vector<string> strArray(str,str+n);
|
|
-
-
delphiwcdj
-
delphiwcdj
-
本版等级:
-
|
#3 得分:0
回复于: 2011-03-09 20:41:35
1
2
3
4
5
6
7
8
9
10
11
|
#include <iostream>
#include <vector>
#include <string>
using
namespace
std;
int
main()
{
string str[]={
"hello"
,
"world"
,
"\n"
};
vector<string> strArray(str,str+
sizeof
(str)/
sizeof
(str[0]));
return
0;
}
|
|
|
-
-
qq120848369
-
qq120848369
-
本版等级:
-
|
#4 得分:5
回复于: 2011-03-09 21:12:11
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#include <iostream>
#include <vector>
#include <string>
using
namespace
std;
int
main()
{
const
char
* init[]=
{
"A"
,
"B"
,
"C"
};
vector<string> strArray(init,init+3);
for
(vector<string>::iterator iter=strArray.begin();iter!=strArray.end();++iter)
{
cout<<*iter<<
" "
;
}
cout<<endl;
return
0;
}
|
这样就可以了,话说string有接受const char*的构造函数,构造之后再placement new.
|
|
-
-
guandq2106
-
管哥的天下
-
本版等级:
-
|
#5 得分:0
回复于: 2011-03-09 21:29:22
push_back
|
|
-
-
namelij
-
namelij
-
本版等级:
-
|
#6 得分:0
回复于: 2011-03-09 21:56:51
1
|
vector<string> strArray(10,
"hello"
);
|
|
|
-
-
yangsen600
-
_Cyril_
-
本版等级:
-
|
#7 得分:5
回复于: 2011-03-09 22:08:47
1
2
|
string str[]={
"hello"
,
"world"
,
"this"
,
"find"
,
"gank"
,
"pink"
,
"that"
,
"when"
,
"how"
,
"cpp"
};
vector<string> strArray(str,str+10);
|
|
vector<string>怎么用
我有更好的答案
1条回答
#include<string>
#include <vector>
#include <iostream>
using namespace std;
void main()
{
vector<string> vec;//定义个一个字符串容器
string str;
str = "abc";
vec.push_back(str);//把字符串str压进容器
vec.push_back("def");//把字符串"def"压进容器
vec.push_back("123");
for(int i=0; i<vec.size(); i++)
{
cout<<vec[i]<<endl;//打印容器的内容
}
vec.pop_back();//取出容器中最后一个
for(int i=0; i<vec.size(); i++)
{
cout<<vec[i]<<endl;//打印容器的内容
}
}
追答:
用这个也行哦
vec.resize(4,"abc");
一次性有4个abc
标题:求教一个vector<string>指针问题
求教一个vector<string>指针问题
该题目为c++primer的习题:编写程序定义一个vector对象,其每个元素都是指向string类型的指针,读取该vector对象,输出每个string的内容及其相应的长度。
我的程序如下:
#include<iostream>
#include<string>
#include<vector>
#pragma warning(disable:4786)
using namespace std;
int main()
{
string str;
vector<string*> psvec;//为何这里用string*类型,不能用vector<string>*呢?
while(cin>>str)
{
string *ps=new string;//为何这里要动态创建string,不能直接psvec->push_back(str)?
*ps=str;//这里为何用*ps=str,不能使用ps=&str?
psvec.push_back(ps);/*在这里我们把ps给psvec,那么psvec保存的应该是string*类型,
下面的for循环显然使用了该类型的begin(),end()操作,
为什么可以这样用?*/
}
for(vector<string*>::iterator iter=psvec.begin();iter!=psvec.end();++iter)
{
cout<<**iter<<" "<<(*iter)->size()<<endl;
delete *iter;/*1.为何要释放*iter?
2.为何不是释放iter?
3.我们动态创建的是ps,为何不是释放ps?
4.我在网上找的答案是在这个for循环外另起一个同样的循环释放*iter,我在这里释放有何不可?
我在这里释放,编译也可通过,为何?*/
}
return 0;
}
此题给我的问题颇多,希望各位大神能给出详细解答!
先行谢过!
2010-03-01 16:24
是否正确,望高手斧正!
#include<iostream>
#include<string>
#include<vector>
#pragma warning(disable:4786)
using namespace std;
int main()
{
string str;
vector<string*> psvec;//vector<T> T是类型,而vector<T>*是指向一个vector的指针
while(cin>>str)
{
string *ps=new string;//str不是string*类型,同时str的地址是不变的
*ps=str;//*ps=str,ps=&str你认为它们是一样的吗?
psvec.push_back(ps);/*在这里我们把ps给psvec,那么psvec保存的应该是string*类型,
下面的for循环显然使用了该类型的begin(),end()操作,
但begin(),end()返回的不是string* 而是string** */
}
for(vector<string*>::iterator iter=psvec.begin();iter!=psvec.end();++iter)
{
cout<<**iter<<" "<<(*iter)->size()<<endl;
delete *iter;/* *iter就是ps 再用一个循环释放与这个没有本质差别*/
}
return 0;
}
★★★★★为人民服务★★★★★
2010-03-02 07:47
实际上你可以用vector<string>来处理这个问题,不必用vector<string*>
#include<iostream>
#include<string>
#include<vector>
#pragma warning(disable:4786)
using namespace std;
int main()
{
string str;
vector<string> psvec;
while(cin>>str)
{
psvec.push_back(str);
}
for(vector<string>::iterator iter=psvec.begin();iter!=psvec.end();++iter)
{
cout<<*iter<<" "<<iter->size()<<endl;
}
return 0;
}
[
本帖最后由 cnfarer 于 2010-3-2 08:03 编辑 ]
★★★★★为人民服务★★★★★
2010-03-02 07:58
还有些疑惑:ps在这里应该是一个string类型的动态指针,那么*ps=str表示对ps解引用操作保存的是str的值,而ps=&str表示ps保存的是str的地址,那么对ps进行解引用应该也是得到的str的值啊。所以我不明白,为什么只能用*ps=str而不能使用ps=&str。事实上,我试过把*ps=str改成ps=&str,确实出现一堆错误,请问这两者有何区别,谢谢!
2010-03-02 09:12
以下是引用dong820729在2010-3-2 09:12:19的发言:
还有些疑惑:ps在这里应该是一个string类型的动态指针,那么*ps=str表示对ps解引用操作保存的是str的值,而ps=&str表示ps保存的是str的地址,那么对ps进行解引用应该也是得到的str的值啊。所以我不明白,为什么只能用 ...
编译成功,没有问题
2010-03-02 11:26
以下是引用cnfarer在2010-3-2 07:47:58的发言:
是否正确,望高手斧正!
#include<iostream>
#include<string>
#include<vector>
#pragma warning(disable:4786)
using namespace std;
int main()
{
string str;
vector<string*> psvec;//vector<T> ...
delete *iter这边不对,*iter是string的指针。
2010-03-02 11:27
回复 4楼 dong820729
*ps=str是赋值(将str的内容复制到ps所指向的地址空间)!而ps=&str是改变了ps指向的内存空间的地址,不再是申请到地址了,而是str的地址!
★★★★★为人民服务★★★★★
2010-03-02 14:13
而string本身就应该是个指针,所以ps=&str以后,肯定要出错的
★★★★★为人民服务★★★★★
2010-03-02 14:21
回复 6楼 秀痘魔导士
你可以delete **iter啊
★★★★★为人民服务★★★★★
2010-03-02 14:24
以下是引用cnfarer在2010-3-2 14:24:47的发言:
你可以delete **iter啊
刚开始没仔细看,你写的没什么问题。我刚开始是看成了*iter你指代str的~
[
本帖最后由 秀痘魔导士 于 2010-3-2 14:34 编辑 ]
标题:求教一个vector<string>指针问题
以下是引用cnfarer在2010-3-2 14:21:36的发言:
而string本身就应该是个指针,所以ps=&str以后,肯定要出错的
ps指向str的地址空间,不会报错的。str就算你没初始化,一般编译器会给你一个默认值。只不过那样产生内存泄露,编译器是不会理会这个的
[
本帖最后由 秀痘魔导士 于 2010-3-2 14:35 编辑 ]
2010-03-02 14:30
回复 11楼 秀痘魔导士
编译通过就行的话,就简单多了!