【发布时间】:2012-05-27 08:06:40
【问题描述】:
我正在学习 C++/通用编程,有时会在为旧标准编写的练习时尝试 C++11 功能。
这个练习涉及一个指向字符串的指针向量。
#include <vector>
#include <string>
#include <iostream>
int main()
{
using std::string ;
using std::vector ;
using std::cout ;
using std::endl ;
vector<string *> v = {new string("Hello") , new string("World")} ;
for (string * x : v) {
cout << *x << " " ;
delete x ;
}
cout << endl ;
}
我在弄清楚如何将初始化列表与这个向量一起使用时有点困难,但这似乎可行。
这个版本也可以:
//...
string s1 = "Hello" ;
string s2 = "World" ;
vector<string *> v = {&s1 , &s2} ;
for (string * x : v)
cout << *x << " " ;
//...
它看起来更干净,而且从我目前学到的知识来看,它似乎是更好的解决方案。
但我发现自己想知道:是否有其他方法可以在不提前创建字符串或不必使用删除的情况下初始化向量?我读到的内容表明 {} 列表应该是通用的。
对于它的价值,这会产生一个相当灾难性的错误:
vector<string *> v = {"Hello" , "World"} ;
【问题讨论】: