Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在多维向量中插入元素 向量排序; 矢量v2; 向量v3; 对于(inti=0;i_C++_Vector - Fatal编程技术网

C++ 在多维向量中插入元素 向量排序; 矢量v2; 向量v3; 对于(inti=0;i

C++ 在多维向量中插入元素 向量排序; 矢量v2; 向量v3; 对于(inti=0;i,c++,vector,C++,Vector,不要把它看成是多维向量,把它看成是向量的向量 vector<vector<int>> sort_a; vector<int> v2; vector<int> v3; for (int i=0; i<4; ++i) { v2.push_back(i); for (int j=0; j<4; ++j) { v3.push_back(j); sort_a.push_back(v2); sort_a.push_back(v3

不要把它看成是多维向量,把它看成是向量的向量

vector<vector<int>> sort_a;
vector<int> v2;
vector<int> v3;

for (int i=0; i<4; ++i) {
v2.push_back(i);

  for (int j=0; j<4; ++j) {
  v3.push_back(j);
  sort_a.push_back(v2);
  sort_a.push_back(v3);
  }

}
但是,
push_-back
调用会导致代码速度变慢,因为您不仅需要始终重新分配向量,而且还必须创建一个临时向量并复制它。

a
vector
不是多维存储的最佳实现。下面的植入对我来说很有效

for (int i = 0; i < n; i++) {
  std::vector<int> temp_vec;

  for (int j = 0; j < n; j++) {
    temp_vec.push_back(j);
  }

  vec.push_back(temp_vec);
}
模板
类数组{
标准:尺寸数据;
标准:最大尺寸;
标准::行大小\u最大值;
std::载体a;
公众:
数组\u 2d(标准::大小列,标准::大小列)
:数据(列*行)、列最大值(列)、行最大值(行)、a(数据)
{}
运算符()(标准::大小列,标准::大小行){
断言(列最大值>列和行最大值>行)
返回一个[col_max*col+行];
}
};
用例:

template<typename T>
class array_2d {
    std::size_t data;
    std::size_t col_max;
    std::size_t row_max;
    std::vector<T> a;
public:
    array_2d(std::size_t col, std::size_t row) 
         : data(col*row), col_max(col), row_max(row), a(data)
    {}

    T& operator()(std::size_t col, std::size_t row) {
        assert(col_max > col && row_max > row)
        return a[col_max*col + row];
    }
};
array_2da(2,2);
a(0,0)=1;

cout这将尝试在向量末尾之外写入。通过保留元素,我可以使用[][]方法传递值,但由于存在大量不必要的分配,我想仅在需要时使用pushback和insert值,我该如何做?@interjay:抱歉,出于某种原因,我认为向量已经正确调整大小。您不必在循环内调整大小。您可以在初始化过程中完成所有操作。只需创建一个大小为4的向量full大小为4个向量。@juanchopanza:谢谢,修复了。您可以在构造函数初始值设定项列表中初始化向量
a
,从而避免调用
rezize
。这样可以避免重新分配。
template<typename T>
class array_2d {
    std::size_t data;
    std::size_t col_max;
    std::size_t row_max;
    std::vector<T> a;
public:
    array_2d(std::size_t col, std::size_t row) 
         : data(col*row), col_max(col), row_max(row), a(data)
    {}

    T& operator()(std::size_t col, std::size_t row) {
        assert(col_max > col && row_max > row)
        return a[col_max*col + row];
    }
};
array_2d<int> a(2,2);
a(0,0) = 1;
cout << a(0,0) << endl;