দ্বি মাত্রিক স্ট্যান্ড :: ভেক্টর শুরু করা হচ্ছে


116

সুতরাং, আমার নিম্নলিখিতগুলি রয়েছে:

std::vector< std::vector <int> > fog;

এবং আমি এটিকে খুব নির্বোধের মতো শুরু করছি:

    for(int i=0; i<A_NUMBER; i++)
    {
            std::vector <int> fogRow;
            for(int j=0; j<OTHER_NUMBER; j++)
            {
                 fogRow.push_back( 0 );
            }
            fog.push_back(fogRow);
    }

এবং এটি খুব ভুল অনুভব করে ... ভেক্টরকে এভাবে আরম্ভ করার অন্য কোনও উপায় আছে কি?


4
আপনার যদি এর চেয়ে বেশি স্থানের প্রয়োজন না হয় তবে আমি 2 ডি ভেক্টরের জন্য 1 ডি ভেক্টর বাস্তবায়নের পরামর্শ দেব std::vector<int>::max_size()এখানে
Andre

ভাল হত যদি কমপক্ষে উত্তরগুলির মধ্যে একটির অভ্যন্তরীণ ভেক্টর অনুলিপি করা না জড়িত : মেমসেটটি মেমকপির চেয়ে দ্রুত হয় (এবং অপারেটর নতুন ইনলাইনড হয়ে গেলে কলোক আরও ভাল)।
মার্ক গ্লিস

উত্তর:


199

std::vector::vector(count, value)প্রাথমিক আকার এবং একটি ডিফল্ট মান গ্রহণ করে এমন কনস্ট্রাক্টর ব্যবহার করুন :

std::vector<std::vector<int> > fog(
    A_NUMBER,
    std::vector<int>(OTHER_NUMBER)); // Defaults to zero initial value

যদি শূন্য ব্যতীত কোনও মান হয়, 4উদাহরণস্বরূপ বলুন , তখন ডিফল্ট হওয়ার প্রয়োজন ছিল:

std::vector<std::vector<int> > fog(
    A_NUMBER,
    std::vector<int>(OTHER_NUMBER, 4));

আমার আরও উল্লেখ করা উচিত যে সি ++ 11 এ অভিন্ন সূচনা প্রবর্তন করা হয়েছিল, যা vectorব্যবহার করে অন্যান্য পাত্রে আরম্ভ করার অনুমতি দেয় {}:

std::vector<std::vector<int> > fog { { 1, 1, 1 },
                                    { 2, 2, 2 } };

আমি যদি সঞ্চয় বর্গ করা std :: vector <std :: vector <int>>যেমন static?
ধর্মঘট

39

ধরা যাক আপনি প্রাথমিক মান 0 হতে 2D ভেক্টর, এম * এন শুরু করতে চান

আমরা এটি করতে পারে

#include<iostream>
int main(){ 
    int m = 2, n = 5;

    vector<vector<int>> vec(m, vector<int> (n, 0));

    return 0;
}

এই উত্তরের কারণে সবেমাত্র একটি 'ভাল উত্তর' অর্জিত হয়েছে। অন্যান্য লোকেরা ইতিমধ্যে একই উত্তর দিয়েছিল, তবে যারা এইটিকে সমর্থন করেছেন তারা আমার এই পোস্টে আসার সময় আমার মতো হতে পারে, আমরা জানি না যে কিছু অন্যান্য উত্তর আসলে একই উত্তর same আমি মনে করি এটি কারণ হতে পারে কারণ তিনটি: 1) এই কোডটি অনুলিপি করা, আটকানো এবং সরাসরি চালানো যেতে পারে 2) std::এটি দীর্ঘায়িত করে এবং লোকেরা সংক্ষিপ্ত এবং সরাসরি উত্তর পছন্দ করতে পারে; 3) পরিবর্তনশীল বিভ্রান্তকারীদের দীর্ঘ নামকরণ। আমিও একজন শিক্ষানবিস, সত্যই জানেন না যে আমাদের কীভাবে গুরুত্বপূর্ণ std::, একটি কোড রান্নেবলের দরকার যাতে প্রতিটি ভেরিয়েবল কী করে তা আমি জানি
জেসন

35

এতে কোনও appendপদ্ধতি নেই std::vectorতবে আপনি যদি A_NUMBERশেরোযুক্ত intপ্রত্যেকটির ভেক্টরযুক্ত ভেক্টর তৈরি করতে চান other_numberতবে আপনি এটি করতে পারেন:

std::vector<std::vector<int>> fog(A_NUMBER, std::vector<int>(OTHER_NUMBER));

8

ইতিমধ্যে চিত্র হিসাবে সাধারণ বাক্য গঠন:

std::vector<std::vector<int> > v (A_NUMBER, std::vector <int> (OTHER_NUMBER, DEFAULT_VALUE))  

এখানে, ভেক্টরকে 'A_NUMBER' সারিগুলির দ্বি মাত্রিক অ্যারে হিসাবে ভিজ্যুয়ালাইজ করা যেতে পারে, তাদের প্রাথমিক মানটি 'DEFAULT_VALUE' এ সেট করা কলামের 'OTHER_NUMBER' সহ '

এছাড়াও এটি এইভাবে লেখা যেতে পারে:

std::vector <int> line(OTHER_NUMBER, DEFAULT_VALUE)
std::vector<std::vector<int> > v(A_NUMBER, line)

2-ডি ভেক্টর ইনপুটিং মান 2-ডি অ্যারে ইনপুট মানগুলির অনুরূপ:

for(int i = 0; i < A_NUMBER; i++) {
     for(int j = 0; j < OTHER_NUMBER; j++) {
         std::cin >> v[i][j]
     }
}

অন্যান্য উত্তরে উদাহরণ ইতিমধ্যে বলা হয়েছে ....!


3

আমি মনে করি এটি করার সহজতম উপায় হ'ল:

std::vector<std::vector<int>>v(10,std::vector<int>(11,100));

10 হ'ল বহিরাগত বা বৈশ্বিক ভেক্টরের আকার, যা প্রধান এক, এবং 11 প্রকারের অভ্যন্তরীণ ভেক্টরের আকার এবং প্রাথমিক মানগুলি 100 তে প্রাথমিক হয়! এটি স্ট্যাকের বিষয়ে আমার প্রথম সহায়তা, আমি মনে করি এটি কাউকে সহায়তা করে।


2

মনে করুন আপনি এন-সারি এবং এম কলামের সাথে দুটি মানের দ্বি মাত্রিক পূর্ণসংখ্যা ভেক্টর শুরু করতে চান যার মান ' VAL ' রয়েছে

হিসাবে এটি লিখুন

std::vector<vector<int>> arr(n, vector<int>(m,VAL));

এই VAL একটি পূর্ণসংখ্যার ধরণের পরিবর্তনশীল বা ধ্রুবক যেমন 100 এর হতে পারে


1

প্রস্তাবিত পদ্ধতিটি একটি প্রদত্ত ডিফল্ট মান সহ একটি দ্বি-মাত্রিক ভেক্টরকে আরম্ভ করার জন্য ফিল কনস্ট্রাক্টর ব্যবহার করা হয়:

std::vector<std::vector<int>> fog(M, std::vector<int>(N, default_value));

যেখানে, এম এবং এন আপনার 2 ডি ভেক্টরের জন্য মাত্রা।


1

আমার c++ STLকোডটি দিয়ে আরম্ভ 5*3 2-D vectorকরার জন্যzero


#include <iostream>
using namespace std;
#include <vector>
int main()
{// if we wnt to initialise a 2 D vector with 0;

    vector<vector<int>> v1(5, vector<int>(3,0));

    for(int i=0;i<v1.size();i++) 
{
        for(int j=0;j<v1[i].size();j++)

           cout<<v1[i][j]<<" ";

            cout<<endl;
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.