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 回答