如何解决如何在C ++中循环遍历具有不同长度的动态2D数组
我有一个二维数组,其中列的大小长度不同。那么如何动态循环2d数组中的所有元素?
string** arr = new string*[4];
arr[0] = new string[5];
arr[1] = new string[3];
arr[2] = new string[4];
arr[3] = new string[2];
解决方法
使用这样的动态数组将变得更加难以维护,并且与使用std::vector
相比并没有给您带来任何好处。您需要分别存储每个数组的大小。
示例:
#include <iterator>
#include <memory>
#include <utility>
template<typename T>
struct myarr {
myarr() = default;
myarr(size_t size) : arr(std::make_unique<T[]>(size)),m_size(size) {}
T& operator[](size_t idx) { return arr[idx]; }
const T& operator[](size_t idx) const { return arr[idx]; }
auto cbegin() const { return &arr[0]; }
auto cend() const { return std::next(cbegin(),m_size); }
auto begin() const { return cbegin(); }
auto end() const { return cend(); }
auto begin() { return &arr[0]; }
auto end() { return std::next(begin(),m_size); }
private:
std::unique_ptr<T[]> arr;
size_t m_size;
};
int main() {
myarr<myarr<std::string>> arr(4);
arr[0] = myarr<std::string>(5);
arr[1] = myarr<std::string>(3);
arr[2] = myarr<std::string>(4);
arr[3] = myarr<std::string>(2);
for(auto& inner : arr) {
for(const std::string& str : inner) {
// do stuff
}
}
}
基于std::vector
的代码仅需要以下内容,并提供更大的灵活性:
示例:
std::vector<std::vector<std::string>> arr(4);
arr[0].resize(5);
arr[1].resize(3);
arr[2].resize(4);
arr[3].resize(2);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。