我使用:
创建了一个二维矢量 std::vector<std::vector<int> *> hp;
我想初始化hp vector并从特定索引中获取相同的数据。
for eg,
Getting the values from hp[2][2];
请帮忙
答案 0 :(得分:1)
请注意
std::vector<std::vector<int>*> hp
定义了一个std :: vector,其中包含指向
类型对象的指针std::vector<int>
正如ravi所说,你可能想要
std::vector<std::vector<int>> hp;
但是如果你坚持使用带指针的矢量,
std::vector<std::vector<int>*> hp;
(*hp[2])[2] // retrieves third value from third std::vector<int>
备注:在C ++ 11(也称为C ++ 0x)中,您不需要&#34;&gt;&#34;之间的间距。 (正如我在例子中写的那样)。
答案 1 :(得分:1)
尝试以下
#include <iostream>
#include <vector>
int main()
{
std::vector<std::vector<int> *> hp =
{
new std::vector<int> { 1, 2, 3 },
new std::vector<int> { 4, 5, 6 }
};
for ( std::vector<std::vector<int> *>::size_type i = 0;
i < hp.size(); i++ )
{
for ( std::vector<int>::size_type j = 0; j < hp[i]->size(); j++ )
{
std::cout << ( *hp[i] )[j] << ' ';
// std::cout << hp[i]->operator[]( j ) << ' ';
}
std::cout << std::endl;
}
for ( auto &v : hp ) delete v;
return 0;
}
对于内循环中的注释和未注释语句,程序输出将是相同的,看起来像
1 2 3
4 5 6
答案 2 :(得分:0)
如果这些是指向其他地方拥有的载体的指针:
#include <vector>
#include <iostream>
#include <algorithm>
int main() {
// Create owning vector
std::vector<std::vector<int>> h = {{0,1,2},{3,4,5},{6,7,8}};
// Create vector of pointers
std::vector<std::vector<int>*> hp(h.size());
//auto get_pointer = [](std::vector<int>& v){return &v;}; // C++11
auto get_pointer = [](auto& v){return &v;}; // C++14
std::transform(h.begin(), h.end(), hp.begin(), get_pointer);
// Output value in third column of third row
std::cout << (*hp[2])[2];
}