如何初始化Vector c ++的指针?

时间:2016-02-03 16:06:33

标签: c++ vector operator-overloading

以下代码无效:

$user = new User(1);
foreach($user as $key => $value){
   echo $key.' = '.$value.'<br>';
}

我应该如何初始化它?

2 个答案:

答案 0 :(得分:1)

我没有看到矢量动态分配的意义,但正确的语法看起来像

#include <iostream>
#include <vector>

int main() 
{
    std::vector<std::vector<int> > *pv = new std::vector<std::vector<int> >;

    pv->push_back( std::vector<int>( 1, 10 ) );

    std::cout << ( *pv )[0][0] << std::endl;

    delete pv;
}

输出

10

答案 1 :(得分:0)

  

std::vector<std::vector<int>>* te = new std::vector<std::vector<int>>();

这一行不是你的问题。但是,它确实提出了问题“为什么要动态分配std::vector?”

  

(*te)[0].push_back(10);

这一行是你的问题。您正在访问te的0 th 索引,但它是空的(即,执行此操作会调用未定义的行为)。您需要先添加一些内容:te->push_back(std::vector<int>());

示例代码

#include <iostream>
#include <vector>

int main()
{
    std::vector<std::vector<int>>* te = new std::vector<std::vector<int>>();

    // Add an empty `vector` to `te`
    te->push_back(std::vector<int>());

    // Add `10` to the first `vector` in `te` and print it
    (*te)[0].push_back(10);
    std::cout << (*te)[0][0];

    delete te;

    return 0;
}

注意:您还应该养成使用智能指针的习惯,而不必担心手动新建和删除内存(例如std::unique_ptr指针和std::make_unique)。