同时设置多个数组变量(c ++)

时间:2017-09-21 01:50:15

标签: c++ arrays

我试图使用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?

4 个答案:

答案 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。