c++ - 初始化 std::vector 的大小

标签 c++ iterator stdvector

这可能是一个基本问题..我有这样的类(class):

class Foo {

    private:

    vector<MyStructure> data;

    public:

    void read(const cv::FileNode& node) {
        // read data from file

        cv::FileNode n = node["MyStructure"]; 
        cv::FileNodeIterator it = n.begin(), it_end = n.end(); 
        for (int i = 0; it != it_end; ++it, ++i) {
            *it >> data[i];   // there's a problem here. 
        }
    }

}

请注意 it是一个指向 MyStructure 的迭代器容器中的元素 n .这是我遇到的问题。我不知道 vector<MyStructure> data 的大小提前(当我构造对象时)。所以我不能简单地分配 *it >> data[i] .这段代码可以编译,但会因运行时错误而崩溃。我怎样才能解决这个问题?如果可能,解决方案需要高效(也就是说,它应该避免制作太多 MyStructure 对象的拷贝)。

最佳答案

MyStructure temp;
*it >> temp;
data.push_back(std::move(temp));

这避免了制作太多 MyStructure 对象的拷贝。它只制作足够的拷贝。

如果 n 是一个容器,它有一个 size 成员函数,那么首先这样做:

data.reserve(n.size());

关于c++ - 初始化 std::vector 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19916814/

相关文章:

c++ - C++找不到成员

python & c-c++扩展模块案例段错误

c++ - 如何从类列表中释放内存

c++ - 在现代 C++ 中使用原始指针是不好的做法吗?

c++ - 在 C++11 之前的版本中将字符串列表填充到 vector 中

c++ - 实现功能的更好方法

c++ - 当容器定义为 const 时,带有自定义迭代器的自定义容器不起作用

python - 使用 yield 而不是 return 创建函数以连续从 http 流生成帧

ruby - 如何遍历可能的整数数组,例如从 [1,1,1,1] 到 [1,1,1,2],...最后到 [6,6,6,6]?

c++ - 存储指向固定大小 vector 内的元素的指针