2

JavaScript コードをいくつか書きましたが、パフォーマンスのために C++ に翻訳したいと思っていますが、C++ の知識はほとんどありません。

JavaScript では、次のことができます。

var arr=[[['à','á'],['è','é'],['ì','í'],['ò','ó'],['ù','ú']],['a','e','i','o','u']];

C ++でそのようなことを行うにはどうすればよいですか? 私はしなければならない

vector<vector<char>> arr;

次に、各要素を手動で設定しますか?

arr[0][0]='à';
arr[0][1]='á';
...
4

5 に答える 5

7

はい、C++ 11 を使用していない限り、少なくとももう少し作業が必要です。これにより、コンストラクターが初期化リストを取る可能性が追加されます。

std::vector<std::vector<char>> arr {{'a', 'b'}, {'c', 'd', 'e'}, {'f'}};

に置き換えることも検討std::vector<char>してstd::stringください。

于 2012-07-17T16:12:17.450 に答える
2

これは C++11 で動作します

std::vector<std::vector<char>> var arr={{'à','á'},{'è','é'},{'ì','í'},{'ò','ó'},{'ù','ú'},{'a','e','i','o','u'}};
// Note it is changed from the original I removed one level of nesting from part of the array.

C++03 を使用している場合。
次に、物事を少し変更する必要があります。

std::string var[] = {"àá'", "èé", "ìí", "òó", "ùú", "aeiou"};

型には変更がありますが、影響は同じで、オブジェクトへのアクセスvarは変更されていません。

于 2012-07-17T16:18:02.437 に答える
2

または、 を使用することもできますstd::vector< std::pair< char, char > >

使用できないことに注意してくださいoperator[](つまり、呼び出しarr[0]またはarr[0][0]空のベクターで(要求された要素がそこにないため、プログラムをクラッシュさせる無効なメモリにアクセスします)push_back(...)

vector< pair< char, char > > arr;
arr.push_back( make_pair( 'à','á' ) );
arr.push_back( make_pair( 'è','é' ) );
arr.push_back( make_pair( 'ì','í' ) );
arr.push_back( make_pair( 'ò','ó' ) );
arr.push_back( make_pair( 'ò','ó' ) );
arr.push_back( make_pair( 'ù','ú' ) );

やりたいことによっては、あなたstd::map< char, char >にとっても役立つかもしれません。最初のタイプをキーとして使用して要素にアクセスできます。

std::map<char, char > mymap;
mymap['à'] = 'á';
// will print "Element à = à"
cout << "Element à = " <<  mymap['à']  << endl;
于 2012-07-17T16:21:37.453 に答える
1

残念ながら、ベクトルを配列として初期化することはできません。ただし、ベクトル配列で初期化することはできます。単一のベクトルの場合:

static const int arr[] = {1,2,3,4};
vector<int> vec (arr, arr + sizeof(arr) / sizeof(arr[0]) );

ベクトルのベクトルを初期化するのは少しトリッキーですが、上記のように、または次のようにサイクルで実行できます: (疑似コード):

for( int i =0; i < something; i++ )//the outer vector
{
    vector.pushBack( std::vector<int> );
    for( int j =0; j < somethingElse; j++)
        vector[i].push_back(j);
}
于 2012-07-17T16:12:06.520 に答える
0

以下は、c++0x を使用したコード スニペットです。

#include <vector>
#include <iostream>
using namespace std;

int main(){
    vector< vector<char> > v = { {'a','b','c'}, {'d','e','f'} };
    for (unsigned i=0; i<v.size(); i++){
        cout <<"Subvector: ";
        for (unsigned j=0; j<v[i].size(); j++)
            cout << v[i][j];
        cout << endl;
    }

    return 0;
}

g++ -std=c++0x でコンパイルします

于 2012-07-17T16:15:54.933 に答える