我有课程电子邮件, 她的构造函数中有参数“bcc”。 它实际上是用于复制的电子邮件列表。 这些电子邮件没有固定数量,之后我必须有可能扩展此列表。
//constructor prototype
Email::Email(vector<string> bcc)
所以我想使用类型向量或列表和函数push_back()。 如何使用密送电子邮件制作新实例?
我需要为我的列表定义声明。
我已经用整数类型的迭代器找到了这个定义:
int myints[] = {16,2,77,29};
Email myEmail(vector<int> (myints, myints + sizeof(myints) / sizeof(int) ));
,但它不是非常用户的朋友,我需要用字符串。
有类似的东西吗?
Email myEmail(vector<string> ("first","second","third"));
答案 0 :(得分:3)
除了C ++ 0x列表初始化之外,还有Boost.Assign库应该做类似的事情。
答案 1 :(得分:2)
如果你有C ++ 0x,你可以做vector {“first”,“second”,“third”}。否则,你必须在某个地方创建一个新的向量,并手动推送你想要的每个,然后构造。
另外,你应该真的通过引用获取该向量,它确实非常大。
你应该使用std :: vector,除非你知道你需要在中间插入项目,而不是在最后。
答案 2 :(得分:1)
如果您未使用C++0x
,则无法访问初始化工具。你能添加一个带有任何旧迭代器的构造函数, viz :
#include <vector>
#include <list>
#include <iostream>
struct Email
{
typedef std::vector<std::string> BccType;
BccType m_bcc;
template <typename T>
Email(const T& iter, const T& end)
:m_bcc(iter, end)
{
}
// Purely here for illustrative purposes...
void display()
{
std::cerr << m_bcc.size() << " addresses..." << std::endl;
for (BccType::iterator iter = m_bcc.begin(), iterEnd = m_bcc.end(); iter != iterEnd; ++iter)
{
std::cerr << *iter << std::endl;
}
}
};
int main(int, char*[])
{
// Plain old char* array...
const char* bcc[] = {"Jeff", "Joel", "Larry", "Brin"};
const size_t count = sizeof bcc / sizeof bcc[0];
Email email(&bcc[0], bcc + count);
email.display();
// STL container variation...
std::list<std::string> names;
names.push_back("Bill");
names.push_back("Steve");
Email reply(names.begin(), names.end());
reply.display();
return 0;
}
当然,没有理由为ctor
const BccType&
提供typedef
(std::vector
ed以简化和可维护性)。请注意,我建议通过引用传递此内容以保存复制{{1}}两次。