C++动态字符串的动态数组
C++ dynamic array of dynamic strings
我知道如何在C++中创建字符串的动态数组:
string* array = new string[10];
但是如何在C++中创建动态字符串的动态数组呢?我的意思是容纳string*
对象的动态数组。如何初始化每个动态字符串?
我同意,如果你需要实现你所要求的东西,你可能应该重新考虑你的设计。但是,您所询问的语法与字符串数组完全相关:
string** sillyIdea = new string*[10];
//some access examples
sillyIdea[0]= new string;
*(sillyIdea[0]) = "hello";
(*(sillyIdea[0]))[0] = 'H';
sillyIdea[1]= new string;
//statement below looks like a 2d array construct but it is not,
//just shorthand for
// *((sillyIdea[1]) + 0)
sillyIdea[1][0] = "world";
//an array of pointers can usually be treated programtcally as a
//jaggedarray(asymtrical multi-dimensional array). In other words,
// your array of string pointers can be treated like an array of one
//element string arrays, making for a cleaner syntax, but worse code.
//in int main(int argc, char** argv), argv is one such example of a jagged array.
上面建议的字符串向量将产生更少的心痛
您已经知道可以使用 new string[n]
创建 string
对象的数组。
您可以扩展该想法以分配任何类型的对象数组†类型T
:new T[n]
。如果要创建string*
对象的数组,只需使用 new string*[n]
即可。
也就是说,几乎不需要动态分配std::string
实例。并且几乎不需要手动分配动态数组而不是使用 std::vector
.
† 有一些限制。使用此特定语法时,类型必须是默认可构造的。
简单的示例:)
#include <iostream>
using namespace std;
int main() {
int n, m;
cin>>n;
cin>>m;
string** array = new string*[n];
for(int i = 0; i<n; i++)
{
array[i] = new string[m];
}
for(int i = 0; i<n; i++)
for(int j = 0; j<n; j++)
cin>>array[i][j];
for(int i = 0; i<n; i++)
for(int j = 0; j<n; j++)
cout<<array[i][j]<<endl;
return 0;
}
相关文章:
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 输出没有重复元素的动态数组(收缩数组)C++
- 正在插入动态数组
- 如何在动态数组上使用搜索函数
- C++ 动态数组每次添加时将大小增加 1 - 错误
- 静态数组的自由动态数组
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 使用 thread 类在 C++ 中构造线程的动态数组时出错
- 如何为 c++ 的不同变量类型的结构元素创建动态数组?
- C++ 使用存储在动态数组中的文本文件中的数据查找模式
- 当我使用自定义类型创建动态数组时,即使使用字符串,它似乎也不起作用
- 为什么 c++ 动态数组的大小没有改变?
- 具有自定义构造函数 (C++) 的类型的动态数组分配
- 指针的 C++ 动态数组 - 何时需要使用它?
- 删除动态数组时未定义标识符
- 哈希映射使用 nullptr c++ 初始化节点的动态数组
- 如何将字符串和整数读取到两个单独的动态数组中的程序编写?
- 动态数组的 C++ 重载加运算符
- 基于数组的列表 - 动态数组创建时出错