我试图使用C ++创建一个ASCII艺术,并在数组中遇到一些问题。
有没有办法同时设置多个数组变量?
让我更具体一点。
初始化数组时,可以这样做。
int arr[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
通过上面显示的方式,您可以同时设置10个数组变量。
但是,我想(重新)设置一些像这样的数组变量?
a[1] = 3;
a[4] = 2;
a[5] = 2;
a[7] = 2;
由于变量中有 NO 规则,我无法做到
for(int i=0; i<10; i++) a[i] = i+1;
fill(n);
我无法使用 for 语句或 fill,fill_n 函数,因为没有规律性。
总结一下, 有没有办法同时设置多个数组变量? (就像上面的第二个代码snipplet?
答案 0 :(得分:0)
据我所知,没有模式,控制结构是多余的,你可能会更好地从文件中读取。
// for user input
int arr[10] = { 0,1,2,3,4,5,6,7,8,9 };
for (int i = 0; i < 10; i++) {
cout << "Please input your value for array index " << i << endl;
cin >> arr[i];
}
// for manual input in initalization
int arr[10] = { 0, 3, 2, 2, 2, 5, 6, 7, 8, 9 };
然而,更好的方法可能是从文件中读取它,http://www.cplusplus.com/forum/general/58945/阅读&#34; TheMassiveChipmunk&#34;在那里发布的具体操作方法。
答案 1 :(得分:0)
假设您知道要更改哪些索引,可以使用单独的索引数组:
int ind[4]= {1,4,5,7};
..以及带有值
的附带数组int new_val[4] = {3,2,2,2};
您可以使用以下for
循环来分配值:
for (int i=0; i<4; i++)
arr[ind[i]] = new_val[i];
您还应该使用一些变量来表示要更改的索引数,如int val_num = 4
而不是普通数字4。
答案 2 :(得分:0)
给定索引值映射列表,并逐个分配。
template<typename T, size_t N>
void Update(T(&arr)[N], const std::vector<std::pair<size_t, T>>& mappings)
{
for (const auto& mapping : mappings)
if(mapping.first < N)
arr[mapping.first] = arr[mapping.second];
}
int main()
{
int arr[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
Update(arr, { {1, 3}, {4, 2}, {5, 2}, {7, 2} });
return 0;
}
答案 3 :(得分:0)
通过使用列表来保存代表您要进行的更改的元组,可以轻松实现在运行时定义到数组的更改。举个例子,我们可以写:
#include <tuple>
#include <list>
#include <iostream>
using namespace std;
typedef tuple <int, int> Change;
int main() {
int a[5] = {1,2,3,4,5};
list<Change> changes;
//represents changing the 2-th entry to 8.
Change change(2,8);
changes.push_back(change);
for(auto current_change: changes)
a[get<0>(current_change)] = get<1>(current_change);
cout << a[2] << '\n';
}
打印8。