如何按索引存储向量的向量
how to store vector of vector by index
嗨,我必须以向量格式存储下面提到的信息...
vector <vector <int>> ph;
vector<int> p, q;
p.push_back(1);
p.push_back(2);
p.push_back(3);
q.push_back(10);
q.push_back(20);
q.push_back(30);
q.push_back(40);
现在不使用:
ph.push_back(p);
ph.push_back(q);
我想使用:
ph.at(0)=p
ph.at(1)=q
(这是我在使用它时遇到的错误:在抛出"std::out_of_range"实例后终止调用 什么(): 向量::_M_range_check)
我想以这种方式存储它的原因是....稍后我想访问由其索引标识的特定向量的元素,即 1 或 0。
例如,我希望访问 ph[0].size(),即 p...由其索引标识。也就是说,我想执行与 c++ 中简单数组相同的操作,即将该数组中的数据存储在特定索引处并从特定索引访问数据。
您会收到错误,因为当您实例化向量的向量时,它的大小为 0,并且允许 at()
方法执行绑定检查并引发异常。
如果你想像这样通过索引访问,那么你最好使用std::map或std::unordered_map。这使得索引独立于插入顺序:
std::map<int, std::vector<int>> MapOfVectors;
std::vector<int> p, q;
// fill vectors
MapOfVectors[1] = q;
MapOfVectors[0] = p;
否则,您必须确保向量的向量足够大,以便按索引插入元素:
// instantiate vector with size 2. You can insert p and q by index. (0, 1) only
vector<vector<int>> ph(2);
或者,在创建后调整其大小:
vector<vector<int>> ph;
ph.resize(2);
定义vector<vector<int>> ph
时,向量ph
为空。.at()
成员函数执行边界检查,并在尝试写入不存在的元素时正确引发异常。
您可以执行ph.resize(2)
,以便索引 0-1 有效,或者像当前一样使用push_back
。
我想使用:
ph.at(0)=p ph.at(1)=q
这试图访问数组末尾的索引,因此会出现异常。
我想以这种方式存储它的原因是....稍后我想访问由其索引标识的特定向量的元素,即 1 或 0。
例如,我希望访问 ph[0].size(),即 p...由其索引标识。也就是说,我想执行与 c++ 中简单数组相同的操作,即将该数组中的数据存储在特定索引处并从特定索引访问数据。
您可以通过首先用空的内部向量填充外部向量来实现这一点:
vector<vector<int> > ph(2);
在这里,2
说构造外部向量以包含 2 个默认构造的元素(它们本身vector<int>
)。
或者,您可以使用:
vector<vector<int> > ph;
ph.resize(2);
完成此操作后,可以安全地访问元素以存储非默认构造的值。 这意味着以下内容不会抛出:
ph.at(0)=p; ph.at(1)=q;
- 访问存储在向量C++中的结构的多态成员
- 添加存储在向量中的大整数的函数出现问题
- 在 std::无符号字符的向量处存储 int 的十六进制表示形式
- 如何从用户那里获取输入并将其存储在向量中?
- 如何从文件中读取两个字符串和数字数组,并将它们存储在对象向量中
- 将无符号字符的向量存储在数组中会给我 std::bad_alloc
- 在二维向量或数组中可以存储的最大元素数是多少?
- 存储在堆分配向量中的指针的免费存储
- 将相同共享指针的副本存储在不同的向量中是否是一种好的做法?
- 将数组信息存储到 c++ 向量中有一个"Access violation reading location"
- Sqlite3:将数据库表名存储在向量中
- 如何在数组和向量 c++ 中存储和保存输入
- C++ 将抽象类型的动态分配对象传递给函数并存储在向量中
- 代码将向量存储为向量<vector>,为什么没有错误消息?
- 替代STD ::向量存储参考而不是对象的副本
- 将向量存储在<file> CStringArray 中?
- 将可变大小结构的向量存储在c++中的二进制文件中
- 使用向量c++存储和洗牌一副牌
- 将指针向量存储在文件中并再次读取它们
- 是否可以/建议将向量存储在结构中?C++