列表(向量)与数组的定义

时间:2010-05-19 16:13:47

标签: c++ list vector declaration definition

我有课程电子邮件, 她的构造函数中有参数“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"));

3 个答案:

答案 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&提供typedefstd::vector ed以简化和可维护性)。请注意,我建议通过引用传递此内容以保存复制{{1}}两次。